WEBVTT

1
00:00:06.280 --> 00:00:10.480
Hey, Welcome to React Roundup,
the podcast where we keep you updated on

2
00:00:10.599 --> 00:00:15.400
all things React related. This show
is sponsored by Raygun and produced by Top

3
00:00:15.439 --> 00:00:18.920
and Doves and Onvoid. Top and
Doves is very great Top and Doves.

4
00:00:18.920 --> 00:00:23.000
We get top and pay and recognition. We're working on interesting problems and making

5
00:00:23.079 --> 00:00:29.480
meaningful community contributions an Onvoid which provides
remote design and software development services on a

6
00:00:29.519 --> 00:00:34.320
task basis, so clients only pay
and tests are delivered and approved. In

7
00:00:34.359 --> 00:00:40.280
today's episode, we will talk about
what your hosts are working on. My

8
00:00:40.359 --> 00:00:43.159
name is Lucas S. Paganini,
one of your hosts in the podcast,

9
00:00:43.200 --> 00:00:49.000
and joining me in today's episode are
also the hosts Chris Ruand Hi everyone,

10
00:00:49.719 --> 00:00:54.640
and Peter Osa. Hi everyone.
Hey folks, this is Charles Maxwell.

11
00:00:54.719 --> 00:00:58.520
I've been talking to a bunch of
people that want to update their resume and

12
00:00:58.719 --> 00:01:02.159
find a better job, and I
figure, well, why not just share

13
00:01:02.200 --> 00:01:04.599
my resume? So you if you
go to top endevs dot com slash resume,

14
00:01:06.519 --> 00:01:08.920
enter your name and email address,
then you'll get a copy of the

15
00:01:08.959 --> 00:01:15.000
resume that I use, that I've
used through freelancing through most of my career.

16
00:01:15.359 --> 00:01:18.319
As I've kind of refined it and
tweaked it to get me the jobs

17
00:01:18.319 --> 00:01:22.480
that I want. Like I said, topendevs dot com slash resume will get

18
00:01:22.519 --> 00:01:25.920
you that and you can just kind
of use the formatting. It comes in

19
00:01:26.000 --> 00:01:30.480
word and pages formats and you can
just fill it in from there. So

20
00:01:32.719 --> 00:01:36.359
I'm going to get the ball rolling. So in my case, something I've

21
00:01:36.400 --> 00:01:42.359
been working on in my spare time
for a very very very very very very

22
00:01:42.480 --> 00:01:51.400
very very very very very very very
very long time is a book about functional

23
00:01:51.439 --> 00:02:00.879
programming, and it's been like a
common go project because at one side,

24
00:02:00.079 --> 00:02:07.239
it's mostly started as a way for
me to really digest some of the most

25
00:02:07.280 --> 00:02:13.639
complex concepts of functional programming and at
the same time wanting to give back to

26
00:02:13.680 --> 00:02:17.120
the community because being quite frank,
I have no expectations of becoming a millionaire

27
00:02:17.800 --> 00:02:24.479
with a technical book about functional programming. It was really just to create something

28
00:02:24.560 --> 00:02:31.240
that would be of value for others
that are also learning, and for that

29
00:02:31.759 --> 00:02:43.240
there's actually one book that is really
really good and has helped me tremendously in

30
00:02:43.280 --> 00:02:49.280
this journey, which I'm going to
say now because since I can't talk about

31
00:02:49.280 --> 00:02:53.960
my book since it's not ready and
might take five more years to be.

32
00:02:53.520 --> 00:02:59.280
Then I'm going to talk about a
book that is ready and it is really

33
00:02:59.319 --> 00:03:05.520
really good, which is Functional Programming
Made Easier, a step by step guide

34
00:03:05.919 --> 00:03:15.879
by Charles Skull Funny. This book
is two thousand pages of amazing, in

35
00:03:15.039 --> 00:03:23.439
depth, super technical content. Like
it is deep. It is like really

36
00:03:23.439 --> 00:03:29.639
really deep. This guy really takes
you from surface level up until super deep

37
00:03:29.759 --> 00:03:36.319
functional programming logic. And it does
it in purescript. Like there's no JavaScript,

38
00:03:36.400 --> 00:03:42.599
no typescript, everything is in purescript. But purescript can be compiled to

39
00:03:42.680 --> 00:03:46.719
JavaScript, so technically you can write
in purescript and compile to run a node

40
00:03:46.879 --> 00:03:52.520
on the server side or just to
run JavaScript on the browser, so it

41
00:03:52.639 --> 00:04:00.120
is doable. But honestly, I
think it's just good for the learning process

42
00:04:00.680 --> 00:04:06.879
of the book, But I wouldn't
really use purescript in my real projects.

43
00:04:06.960 --> 00:04:14.719
It's just too overly complex to most
people. And I think that even if

44
00:04:15.080 --> 00:04:19.319
I have a good enough understanding of
it, which I don't because like I

45
00:04:19.399 --> 00:04:23.800
understand from the book, but I
haven't built enough things with it to say

46
00:04:23.839 --> 00:04:28.959
that I'm proficient in purescript. But
I still wouldn't really use it because I

47
00:04:29.079 --> 00:04:31.879
want other people to be able to
understand my code and work on it.

48
00:04:32.759 --> 00:04:39.199
And as good as purescript is,
it's very niched the amount of developers that

49
00:04:39.279 --> 00:04:42.240
actually know how to write in it, just for you guys to know.

50
00:04:42.319 --> 00:04:48.199
It's super close to Haskell in terms
of syntax, which is also kind of

51
00:04:48.319 --> 00:04:51.759
niche. If you look at the
amount of web developers in the world,

52
00:04:53.439 --> 00:05:00.199
I would say the lass than one
percent knows half called. So what I

53
00:05:00.199 --> 00:05:05.279
wanted to do is a book that
has all the concepts that Charles Caulfuni talks

54
00:05:05.319 --> 00:05:12.439
about in this book, but everything
in typescript. This is what I wanted

55
00:05:12.439 --> 00:05:15.480
to do, and it's probably going
to take a while, but yeah,

56
00:05:15.519 --> 00:05:21.240
this is basically the thing that I've
been looking on in my spare time.

57
00:05:21.319 --> 00:05:27.040
So really curious to know if you
guys have any particular questions about that,

58
00:05:27.279 --> 00:05:31.800
and also to know what you guys
are working on. Yeah, it sounds

59
00:05:31.879 --> 00:05:35.720
that sounds awesome. I mean,
I'm I also make courses myself, and

60
00:05:35.839 --> 00:05:41.720
I just started like making a book
where I made a book a book it's

61
00:05:41.800 --> 00:05:48.480
like forty pages long, So yeah, I mean I need a brush up

62
00:05:48.519 --> 00:05:54.839
on functional programming definitely. I mean
I'm a fan of small like reusable functions.

63
00:05:54.839 --> 00:05:59.279
But in terms of oh man,
the stuff like currying and all this

64
00:05:59.279 --> 00:06:04.240
this fancy stuff which can be super
helpful, I've just I've just forgotten it

65
00:06:04.279 --> 00:06:09.560
over the years. I think,
Yeah, I would be I'm curious,

66
00:06:09.800 --> 00:06:13.920
did you go, like, what's
the path you've gone down for the I

67
00:06:13.920 --> 00:06:17.879
guess the book it's set like the
generation itself. Are you using should I

68
00:06:17.920 --> 00:06:24.079
even say latex? Or have you
gone towards like a markdown. There's so

69
00:06:24.160 --> 00:06:27.319
many solutions out there now for this
type of stuff. I'd be curious and

70
00:06:27.439 --> 00:06:32.079
like, what tools are using there? I have never used Latex. I

71
00:06:32.120 --> 00:06:39.160
think the closest I got to a
complete It's not that bad, it's just

72
00:06:39.199 --> 00:06:46.360
weird. I think the closest I
got to a completely pure functional language was

73
00:06:46.839 --> 00:06:49.680
Hascal. So a while ago I
was trying to learn Haskell. When I

74
00:06:49.759 --> 00:06:55.879
was I was like, okay,
let me go into the core of functional

75
00:06:55.920 --> 00:06:59.800
programming and then I can take it
to out development. So I tried to

76
00:07:00.120 --> 00:07:04.360
or house go and I didn't go
super deep on it, like to the

77
00:07:04.399 --> 00:07:13.160
point where I actually built a useful
API, but I was able to at

78
00:07:13.240 --> 00:07:26.240
least do some simple scripts like validating
an email, validating document registration, like

79
00:07:26.800 --> 00:07:31.639
doing some scripts like that, but
I wasn't able to really like build something

80
00:07:31.800 --> 00:07:38.519
as complex as an API with it, which I think the complexity with functional

81
00:07:38.560 --> 00:07:46.319
programming starts when you need side effects, because it the core idea is that

82
00:07:46.920 --> 00:07:53.360
everything needs to be pure, but
you need to be able to have side

83
00:07:53.360 --> 00:07:57.279
effects, right, Like, you
can't just have functions that always return the

84
00:07:57.279 --> 00:08:01.920
same thing, because what if you
have a function that needs to get the

85
00:08:01.040 --> 00:08:05.600
current time, It's always going to
be different, So how do you do

86
00:08:05.680 --> 00:08:09.120
that? You know, and there
are ways for you to do that in

87
00:08:09.160 --> 00:08:13.600
a pure way like it. Some
may say that it's kind of a hack

88
00:08:15.040 --> 00:08:18.959
because at the end of the day, you're not like really returning the same

89
00:08:18.000 --> 00:08:24.439
thing all the time. But in
a way, it's kind of like conforming

90
00:08:24.519 --> 00:08:30.360
to the functional programming standards. But
when you're building an API, which requires

91
00:08:30.360 --> 00:08:35.039
a lot of that, then that's
where I think most of the complexity of

92
00:08:35.080 --> 00:08:41.679
functional programming lies. And I wasn't
able to do that with Haskell or purescript.

93
00:08:41.120 --> 00:08:48.679
I did it with FPTS a bunch
of times, actually, and fpts

94
00:08:48.759 --> 00:08:54.679
is a library for typescript which exposes
multiple functional programming data structures. It's a

95
00:08:54.720 --> 00:09:01.279
really amazing universe of data structures,
Like they have almost anything that you can

96
00:09:01.320 --> 00:09:05.679
think of. They have wrappers around
a synchronous call. So for example,

97
00:09:05.720 --> 00:09:11.639
we have promises in jobscript, but
promises they are eagerly executed, and in

98
00:09:13.039 --> 00:09:18.200
FPTS, they wanted to have a
synchronous way of retrieving data that would be

99
00:09:18.600 --> 00:09:22.960
lazily executed, so you could compose
it with other operators and it would only

100
00:09:24.159 --> 00:09:28.679
run at the end, like not
while you're applying to the operators, because

101
00:09:28.720 --> 00:09:35.159
when you're doing functions, then you
do like dot then and that executes,

102
00:09:35.399 --> 00:09:39.200
and then it goes to the next
dot then and that executes it, then

103
00:09:39.240 --> 00:09:41.720
it goes to the next dot them. But the idea with fpts is you

104
00:09:43.320 --> 00:09:48.919
define all the operators that will transform
your data, and the data only goes

105
00:09:48.960 --> 00:09:54.120
through the entire pipeline of transformations when
you call it at the end of the

106
00:09:54.279 --> 00:09:58.519
entire chain. So it's kind of
like you apply all the operators and you

107
00:09:58.600 --> 00:10:05.320
return something that FPT calls a task, and the task is pure and simply

108
00:10:05.320 --> 00:10:11.159
a function that returns a promise,
but it's not a promise itself. It's

109
00:10:11.200 --> 00:10:15.320
a function that returns a promise.
So it's not executed yet. You need

110
00:10:15.360 --> 00:10:18.879
to call it to execute. So
everything else PTS is kind of like that.

111
00:10:18.919 --> 00:10:24.399
It allows for lazy evaluation of a
bunch of things. They also have

112
00:10:24.519 --> 00:10:31.600
rappers for maybees, so we do
a lot of like string or noul.

113
00:10:31.759 --> 00:10:35.200
If you were to really use functional
programming, you would not have nual,

114
00:10:35.600 --> 00:10:39.559
you would have a maybe or other
languages call it an option, which is

115
00:10:39.600 --> 00:10:45.919
a wrapper around the value that could
be nulable. So imagine a data structure

116
00:10:45.960 --> 00:10:52.120
that is like a data structure that
has a property called tag, and this

117
00:10:52.320 --> 00:11:01.679
tag is a string that can either
be some, are on. If it

118
00:11:01.720 --> 00:11:05.000
is none, then that's a that's
the entire object. It's like an object

119
00:11:05.039 --> 00:11:11.080
with the property tag equals to none. If it is some, then it

120
00:11:11.159 --> 00:11:16.399
has another property called value, which
holds any kind of value that you want.

121
00:11:16.240 --> 00:11:20.840
So and then you can have a
type union which is like an option

122
00:11:22.080 --> 00:11:30.799
of t is equal to none or
sum of T. So when you have

123
00:11:30.840 --> 00:11:35.720
an option of a string, that
means that either you have none which is

124
00:11:35.759 --> 00:11:41.600
not, or you have a sum
which has a property called value that holds

125
00:11:41.639 --> 00:11:45.879
the string. So there is no
rule. Uh. And and then you

126
00:11:45.960 --> 00:11:50.679
might say, okay, cool,
but what the hell, like, really,

127
00:11:50.840 --> 00:11:54.360
why do you need that? And
the cool thing is all the operators

128
00:11:54.360 --> 00:12:00.000
that come with it. So if
you have an option, then fpts exposed.

129
00:12:00.000 --> 00:12:03.720
This is a bunch of operators for
you to work with that. So

130
00:12:03.759 --> 00:12:09.120
you have like a map, and
a map operator takes a function that converts

131
00:12:09.159 --> 00:12:13.679
the value, but only converts if
the value exists. So if the value

132
00:12:15.679 --> 00:12:20.320
is none, then the function never
gets called, so you don't need to

133
00:12:20.440 --> 00:12:24.279
like check if it is neual,
then don't do anything, and if it's

134
00:12:24.320 --> 00:12:28.279
not dual, then do the transformation. You don't need that because it's already

135
00:12:28.279 --> 00:12:33.320
wrapping that for you. You know, your function is only going to apply

136
00:12:33.399 --> 00:12:37.159
to the value if the value is
not neual, so you don't have to

137
00:12:37.320 --> 00:12:41.600
write checks for new and undefined.
And then you could also, for example,

138
00:12:43.360 --> 00:12:50.639
use an operator called flatMap, which
is going to return another option.

139
00:12:50.360 --> 00:12:54.279
So imagine that you have the option
of a string. Let's say that you

140
00:12:54.399 --> 00:13:00.720
have like a an email, so
this email my might are my not exist,

141
00:13:01.000 --> 00:13:03.360
So you have the option of a
strength that is an email, and

142
00:13:03.399 --> 00:13:11.480
then you want to transform that email
into using a function that takes the string

143
00:13:13.279 --> 00:13:18.240
and it also returns an option.
It also returns something that might or might

144
00:13:18.320 --> 00:13:22.799
not exist, So you can use
the flatMap operator. And if you use

145
00:13:22.799 --> 00:13:26.440
the flatMap operator in a in an
option, if the option is none,

146
00:13:26.559 --> 00:13:31.000
it's not going to do anything.
If the option is some is going to

147
00:13:31.039 --> 00:13:37.240
apply, and then whatever returns becomes
the new value. So if it returns

148
00:13:37.279 --> 00:13:39.120
none, then you have none.
If it returns some, then you have

149
00:13:39.200 --> 00:13:43.919
the value transformating. So there are
a bunch of utility functions like that,

150
00:13:43.960 --> 00:13:48.360
and some of them are really,
really really powerful. And I absolutely love

151
00:13:48.600 --> 00:13:54.279
fpts, and I'm really thankful for
Julio Guanti, which is the creator of

152
00:13:54.320 --> 00:14:03.960
this universe of libraries. But the
problem is that not your co workers aren't

153
00:14:03.080 --> 00:14:07.120
necessarily going to keep up with your
learnings of fpts. So we got to

154
00:14:07.120 --> 00:14:11.559
a point where I was really proficient
in it, but the rest of the

155
00:14:11.639 --> 00:14:16.960
team wasn't. And okay, cool, The code was cleaner to my eyes

156
00:14:18.039 --> 00:14:22.440
because I was more proficient in it
to understand it, But to others,

157
00:14:22.039 --> 00:14:28.000
they were like, I just want
to do a cred How the how do

158
00:14:28.120 --> 00:14:33.519
I do this with this? You
know? Uh? And then we just

159
00:14:33.080 --> 00:14:39.440
decided to not use fpts anymore,
even though it's an amazing library that solves

160
00:14:41.399 --> 00:14:48.200
a lot of problems. It was
just not worth the overhead to the engineers.

161
00:14:48.879 --> 00:14:52.600
Yeah, so I do have a
question. So yeah, I think

162
00:14:52.600 --> 00:14:56.879
it's a good book. So you
know that I think most of them in

163
00:14:56.320 --> 00:15:01.240
the industrialized a lot of people are
kind of like from out so reconize us

164
00:15:01.279 --> 00:15:05.799
of like op neds sense or really
you come to talk about like, okay,

165
00:15:07.200 --> 00:15:11.120
solid principles, which many of them
usually kind of highlights from Opie concepts.

166
00:15:11.159 --> 00:15:16.480
And in your book, like,
is then the way you're trying to

167
00:15:16.559 --> 00:15:20.879
kind of encourage a lot of people
to practice like functional programming in this real

168
00:15:20.919 --> 00:15:26.799
sense? Like, is then any
way or is it maybe something you're kind

169
00:15:26.799 --> 00:15:30.919
of planning. Maybe I wouldn't really
say she's spilled the beans, but just

170
00:15:31.000 --> 00:15:35.519
maybe is there I feel like thought
about it, I'm front of maybe a

171
00:15:35.639 --> 00:15:39.679
way to kind of sensitize or using
functional program is the best way to go?

172
00:15:41.080 --> 00:15:46.879
Was it very nice to go the
goal? If there's any part in

173
00:15:46.919 --> 00:15:52.440
my book, because thus far it's
just explaining the concepts. There wasn't any

174
00:15:52.480 --> 00:15:56.320
part of the book thus far there
was like just trying to convince that functional

175
00:15:56.360 --> 00:16:02.879
programming is the golden standard and or
is terrible because I've been there already and

176
00:16:03.360 --> 00:16:07.000
OP is not terrible. I actually
went back to a lot of things that

177
00:16:07.120 --> 00:16:12.159
like, I missed a lot of
things that OP had, especially dependence injection,

178
00:16:12.679 --> 00:16:19.080
Like a lot of frameworks offer dependence
injection, and there was just the

179
00:16:19.120 --> 00:16:26.960
ex the dependency injection within functional programming
wasn't wasn't the best experience. So there

180
00:16:26.960 --> 00:16:30.279
are a lot of things that I
missed in OP when I went into this,

181
00:16:32.000 --> 00:16:37.679
the search for the golden standard of
programming that I actually that made me

182
00:16:38.440 --> 00:16:42.159
think back, look back and think, oh, actually, it's not that

183
00:16:42.360 --> 00:16:48.200
functional programming or OP is best.
It's just you need to be able to

184
00:16:48.279 --> 00:16:52.320
mix and match and figure out which
one is the best in each context.

185
00:16:52.320 --> 00:16:56.600
So, for example, you're creating
a bunch of utilities, why would you

186
00:16:56.639 --> 00:17:02.879
do them in OP? Like that
makes sense? You can build like the

187
00:17:02.919 --> 00:17:06.079
next low dash. Why would you
do it? You're just going to create

188
00:17:06.119 --> 00:17:10.599
a bunch of unnecessary dependencies. It
would be much better if you just created

189
00:17:10.640 --> 00:17:15.480
isolated functions. But now you're creating
a component. This component holds state.

190
00:17:18.079 --> 00:17:22.319
Why would you not use a class? You know, that's what they were

191
00:17:22.359 --> 00:17:26.680
built for. It makes total sense
to use them, And what I actually

192
00:17:26.839 --> 00:17:34.440
generally do is I try to isolate
as much as I can from the class

193
00:17:34.440 --> 00:17:41.880
methods and properties into functions and then
call those functions in the class during its

194
00:17:41.880 --> 00:17:47.319
creation. So let's say that I
have a method in a class that is

195
00:17:47.359 --> 00:17:52.240
like really complex, Like imagine a
method that is like three hundred lines long,

196
00:17:52.480 --> 00:17:56.880
and then you're like, it makes
sense that it belongs into this class,

197
00:17:57.079 --> 00:18:00.359
is not going to be reused anywhere
else, so there's no point in

198
00:18:00.440 --> 00:18:07.000
making it a function, and everything
inside of it is not utilities, Like

199
00:18:07.119 --> 00:18:11.119
you have three hundred lines, but
you already like isolated everything that you could

200
00:18:11.240 --> 00:18:17.240
which were just utilities like data structure, conversions, et cetera. The three

201
00:18:17.319 --> 00:18:21.160
hundred lines that you have there are
all lines of actual business logic. There's

202
00:18:21.160 --> 00:18:25.519
specific to your application, and it
wouldn't make sense for you to just isolate

203
00:18:25.599 --> 00:18:33.599
that in utility functions. You can
still create a function that generates that method,

204
00:18:33.440 --> 00:18:37.640
and that will at least allow you
to remove those three hundred lines from

205
00:18:37.680 --> 00:18:42.759
the class file and isolate that in
another five and just important. So what

206
00:18:42.799 --> 00:18:48.200
I generally do is every time I
have a function that returns another function,

207
00:18:48.599 --> 00:18:56.680
I prefix it with make so Let's
say that I have a function that it's

208
00:18:56.759 --> 00:19:07.839
supposed to return. A function that
receives like a body of data and processes

209
00:19:07.920 --> 00:19:12.119
that and returns a response. Let's
say that it's like a I don't know

210
00:19:12.160 --> 00:19:18.759
a calendar system, for example,
So you have a post request that receives

211
00:19:18.759 --> 00:19:23.599
some data and it needs to go
to the database, save that data,

212
00:19:23.799 --> 00:19:29.319
do a bunch of validations, and
then return the calendar object, the calendar

213
00:19:29.400 --> 00:19:34.960
event object that was created. So
you could just have this entire method in

214
00:19:36.039 --> 00:19:45.359
a class called like calendar events handler
or calendar events controller whatever, or if

215
00:19:45.400 --> 00:19:48.839
you just wanted to clean up that
file, like the class itself is too

216
00:19:48.880 --> 00:19:51.920
long and you want to be able
to isolate that function just for readability,

217
00:19:52.400 --> 00:19:59.799
you can create another file called like
make create calendar event, and that ex

218
00:20:00.319 --> 00:20:04.279
is a function called make create calendar
event. And this function takes all the

219
00:20:04.319 --> 00:20:10.400
dependencies. So let's say that for
this function to execute, he needs a

220
00:20:10.519 --> 00:20:18.319
reference to the database service, a
reference to the time zone service, a

221
00:20:18.440 --> 00:20:22.039
reference to the user service. Okay, so these are the parameters that you're

222
00:20:22.039 --> 00:20:29.079
going to give and then it's going
to return to you the function that takes

223
00:20:29.160 --> 00:20:33.960
other arguments and creates the calendar event
and returns it if that makes sense.

224
00:20:37.440 --> 00:20:40.519
Hey, there, this is Charles
Maxwood. I'm excited because I wanted to

225
00:20:40.599 --> 00:20:44.519
let you know about this thing that
I pulled together that I had just I've

226
00:20:44.519 --> 00:20:48.440
been dying to have this for years
and I never felt like I could,

227
00:20:48.680 --> 00:20:51.640
and then I just realized that there's
no reason why I can't. So I'm

228
00:20:51.640 --> 00:20:56.039
putting together book club and we're going
to read development focused books, career books,

229
00:20:56.160 --> 00:20:59.000
you know, technical books, whatever. The first book that we're going

230
00:20:59.079 --> 00:21:03.599
to do is going to be Clean
Architecture by Uncle Bob Martin. If you're

231
00:21:03.640 --> 00:21:07.279
not familiar with clean code or some
of the other stuff that Bob has done,

232
00:21:07.480 --> 00:21:10.119
check that out. I've also talked
to him on the Clean Coders podcast,

233
00:21:10.160 --> 00:21:12.400
which is on Top End Devs.
But yeah, we're gonna get on.

234
00:21:12.440 --> 00:21:15.720
He's going to show up to some
of our meetings. And what I'm

235
00:21:15.759 --> 00:21:19.160
thinking is we'll probably have like five
or six people part of the conversation along

236
00:21:19.200 --> 00:21:23.359
with Bob and I at the same
time, and we'll just so somebody can

237
00:21:23.400 --> 00:21:27.279
come on, they can ask their
question, and then we'll just rotate people

238
00:21:27.279 --> 00:21:30.839
through, so we'll mute one person, unmute another person, when it's their

239
00:21:30.920 --> 00:21:34.680
turn to come on and be part
of the discussion. So we'll do that

240
00:21:34.720 --> 00:21:37.000
for like an hour hour and a
half. And then the other part of

241
00:21:37.039 --> 00:21:41.039
it that I'm putting together is just
kind of a meet and greet gather area

242
00:21:41.400 --> 00:21:47.680
on gather Town. And so after
the meetup and the call, we we'll

243
00:21:47.680 --> 00:21:49.759
do as we'll all go over to
gather Town and you can just log in,

244
00:21:49.880 --> 00:21:53.079
walk up to a group and have
a conversation, and that way we

245
00:21:53.119 --> 00:21:57.000
can all kind of get to know
each other and make friends and get to

246
00:21:57.039 --> 00:22:00.039
know people across the world. One
thing that finding is that, yeah,

247
00:22:00.079 --> 00:22:03.799
the meetups are starting to come back, but a lot of people don't have

248
00:22:03.799 --> 00:22:06.759
the opportunity to go to a meetup
and I really want to meet you guys

249
00:22:06.839 --> 00:22:08.319
and talk to you. So we're
gonna put all that together. It'll all

250
00:22:08.319 --> 00:22:11.759
be part of that book club.
You can go to top endevs dot com

251
00:22:11.759 --> 00:22:15.000
slash book Club to be part of
it, and I'm looking forward to seeing

252
00:22:15.039 --> 00:22:18.559
you there. The first book club
meeting will be in December, the beginning

253
00:22:18.559 --> 00:22:22.880
of December. We're starting the first
week of December, and you'll also be

254
00:22:22.920 --> 00:22:26.519
part of the conversation about which book
we do next. I have one in

255
00:22:26.599 --> 00:22:30.680
mind, but I want to see
where everybody's at. So there you go,

256
00:22:32.960 --> 00:22:40.240
yeah, yeah, yeah, so
yeah, I understand. Actually,

257
00:22:40.480 --> 00:22:45.039
So I think one thing is that
I think functional program is actually I think

258
00:22:45.839 --> 00:22:48.839
the functional program we do have,
they'll spend some of the weaknesses. However,

259
00:22:49.160 --> 00:22:52.839
I feel that a lot of people
kind of you know, feel that

260
00:22:53.079 --> 00:23:00.880
Okay, Opiece, it beats a
bit. It also kind of like stimline

261
00:23:00.920 --> 00:23:04.680
principles are all and that when you're
maybe for example, i've actually kind of

262
00:23:04.759 --> 00:23:08.640
been in record if you were by
if you're like, so you're kind of

263
00:23:08.720 --> 00:23:12.440
creating your utility functions, you know, just they're going to be like functions

264
00:23:12.680 --> 00:23:15.000
and like if you will be like, oh, why don't you put this

265
00:23:15.079 --> 00:23:21.720
in the class and those methods and
that kind of thing, because of well

266
00:23:21.920 --> 00:23:27.240
they're kind of familiar with opiece class
methods and so on. So that's why

267
00:23:27.279 --> 00:23:33.880
I asked that question because it's kind
of like a very big and I want

268
00:23:33.880 --> 00:23:37.039
to say controversy, but I think
that's that should be the world. But

269
00:23:37.160 --> 00:23:41.200
yeah, that's that's absolutely great.
So so I think I'm another question,

270
00:23:41.279 --> 00:23:47.440
the question is do you think like, Okay, I don't know if you've

271
00:23:47.680 --> 00:23:52.160
kind of had experience with a lot
of people who kind of purely follow functional

272
00:23:52.200 --> 00:23:55.920
program I think I might say if
I kind of follow like Charls Simpson on

273
00:23:56.200 --> 00:24:00.480
LinkedIn, we kind of talk so
much about like functional programming. So I

274
00:24:00.480 --> 00:24:04.000
don't know, do you feel like
if you've actually worked with like people who

275
00:24:04.000 --> 00:24:11.119
are kind of like functional programming stream
language, if that a lot of people

276
00:24:11.160 --> 00:24:14.880
actually do it a lot, do
you feel that there's this kind of knowledge

277
00:24:14.920 --> 00:24:18.519
gap in some aspects of functional programming
that you feel that maybe in your books

278
00:24:18.519 --> 00:24:23.599
you're kind of going to highlight because
I know so people feel program is just

279
00:24:23.640 --> 00:24:30.920
functions, just maybe functions, functions
and functions, so like that, Yeah,

280
00:24:30.920 --> 00:24:34.039
that kind of thing. What would
I tell people that want to learn

281
00:24:34.119 --> 00:24:40.920
more about functional programming or that might
that maybe they have like a simplified view

282
00:24:41.000 --> 00:24:45.039
of it, just thinking that functional
programm is just creating functions. Okay,

283
00:24:45.480 --> 00:24:52.000
that's a good question. So I
would say, first off, a functional

284
00:24:52.079 --> 00:25:02.000
programming language is a language that allows
you to treat functions as first class citizens.

285
00:25:02.480 --> 00:25:07.599
And that's different from just being able
to create functions, because you may

286
00:25:07.759 --> 00:25:14.680
be writing functions in a language,
whatever language you can think of, like

287
00:25:14.759 --> 00:25:19.400
I'm sure that most languages, most
programming languages have the concept of functions,

288
00:25:19.440 --> 00:25:25.559
but the fact that you can create
a function doesn't make that language functional.

289
00:25:26.319 --> 00:25:33.680
What makes it functional is being able
to treat functions as first class citizens.

290
00:25:33.680 --> 00:25:37.240
And what do I mean by that
is being able to treat functions as data.

291
00:25:38.119 --> 00:25:45.359
Like when you call a function that
is like ad and then it takes

292
00:25:45.359 --> 00:25:52.279
two perameters two numbers one and two
in returns three. That's you expect every

293
00:25:52.319 --> 00:25:56.759
single language in the world to support
that right, to support the ability for

294
00:25:56.839 --> 00:26:00.400
you to create a function called ad
that takes super memeters with numbers and returns

295
00:26:00.440 --> 00:26:07.480
another number. But functional programming languages
are special because they allow you to pass

296
00:26:07.640 --> 00:26:14.119
other functions just like you would pass
a number or a strength. You should

297
00:26:14.119 --> 00:26:18.880
be able in a functional programming language
to call a function that as an argument

298
00:26:19.240 --> 00:26:26.720
receives another function, and it might
return yet another function as a result.

299
00:26:27.880 --> 00:26:33.799
So the first requirement for a functional
programming language is for you to allow you

300
00:26:33.960 --> 00:26:44.480
to treat functions as first class citizens, functions as data. Then another huge

301
00:26:44.519 --> 00:26:49.920
thing, which is not like It
doesn't mean that it doesn't allow the opposite,

302
00:26:49.960 --> 00:27:00.400
but it needs to allow immutability ideally
it would enforce immutability. But technically,

303
00:27:02.240 --> 00:27:07.119
like you can say that a functional
programming language is functional even if it

304
00:27:07.200 --> 00:27:15.720
allows mutability, just simply by also
allowing for immutability. So JavaScript is functional,

305
00:27:17.119 --> 00:27:19.640
but it also allows you to mutate
the objects. If you were to

306
00:27:19.720 --> 00:27:26.920
write functional code, you would never
mutate anything. But then you say,

307
00:27:26.000 --> 00:27:30.640
Lucas, what do you mean,
Like I have a user object, I

308
00:27:30.680 --> 00:27:37.519
need to change the name. Sure, you create another object with the new

309
00:27:37.599 --> 00:27:42.400
name, but you can't mutate the
original one. And there are a bunch

310
00:27:42.440 --> 00:27:47.400
of libraries that facilitate your life on
that. So you could use EMMER,

311
00:27:47.839 --> 00:27:52.680
you could use immutable JS, you
could use fpts as I was mentioning previously,

312
00:27:55.839 --> 00:28:02.000
and then you would write your entire
code, including your variables, like

313
00:28:02.440 --> 00:28:07.759
you technically should not use let variables
anywhere because they are also mutable. So

314
00:28:07.799 --> 00:28:15.319
you should be able to write everything
as constant, every every everything needs to

315
00:28:15.359 --> 00:28:22.799
be constant. Nothing can be mutable. And it's crazy because you can actually

316
00:28:22.160 --> 00:28:26.559
write everything that way. Like at
first it was like that's that's got to

317
00:28:26.599 --> 00:28:33.960
be impossible, like that's there's gotta
be a scenario word, But it actually

318
00:28:34.079 --> 00:28:38.920
is possible. So I would first
say that, just so that the person

319
00:28:38.960 --> 00:28:45.720
can understand that functional programming is not
just creating functions. And then I would

320
00:28:45.799 --> 00:28:52.240
say what do you get by knowing
this and by working in a language that

321
00:28:52.279 --> 00:28:56.799
allows that? And then and then
I would tell the person, now you

322
00:28:56.839 --> 00:29:03.880
are equipped to start learning functional programming
techniques. So now you can research about

323
00:29:06.960 --> 00:29:17.880
maybe about hiders, about lenses,
about currying, as Chris was just talking

324
00:29:17.920 --> 00:29:26.480
about, Uh, you can learn
about semigroups, ords, semiards, rings,

325
00:29:26.799 --> 00:29:33.960
moneds. You know, there are
a lot of abstractions which all those

326
00:29:34.039 --> 00:29:38.839
names that I just mentioned, they
are patterns, you know. They're they're

327
00:29:38.880 --> 00:29:42.319
not specific to a particular language.
They're not specific to Haskell, they're not

328
00:29:42.359 --> 00:29:47.880
specific to scholar, they're not specific
to jeascript. They are patterns kind of

329
00:29:47.920 --> 00:29:52.759
like in OP we have like the
adapter pattern, we have the strategy pattern.

330
00:29:52.279 --> 00:29:56.839
In functional programming you have a bunch
of patterns too, And I think,

331
00:29:57.599 --> 00:30:06.880
uh, functional programming developer is someone
that understands the patterns that exist,

332
00:30:07.720 --> 00:30:15.039
and then he can apply those patterns
even in context where he's also using object

333
00:30:15.119 --> 00:30:18.720
or into programming. So you can
have parts of your code that are functional,

334
00:30:18.759 --> 00:30:23.240
other parts that are that are OP
but the thing is you got to

335
00:30:23.319 --> 00:30:30.279
understand the techniques and the patterns,
that's all. Yeah. I wanted to

336
00:30:30.319 --> 00:30:34.359
point out a funny, like a
funny side note. You mentioned there's there's

337
00:30:34.400 --> 00:30:38.880
no language where you shouldn't be able
to define a function. And I remember

338
00:30:40.279 --> 00:30:42.880
my first days when I was learning
C Sharp and I'm like, oh,

339
00:30:42.880 --> 00:30:45.960
like exactly how you describe, like, oh, I just need a quick

340
00:30:45.000 --> 00:30:48.799
function here, I'm gonna do this, and my mentor then he's like you

341
00:30:48.880 --> 00:30:52.559
can't, and I'm like what.
He's like, Yeah, there's no such

342
00:30:52.640 --> 00:30:56.039
thing as as just like a plane
function. And I was like what because

343
00:30:56.559 --> 00:31:00.559
like I was coming from the front
like front end world, where okay,

344
00:31:00.720 --> 00:31:03.759
yeah, in Angular you're you're still
doing class stuff, but I was in

345
00:31:03.799 --> 00:31:08.839
the React functional hook world and it
like it like blew my mind. I'm

346
00:31:08.839 --> 00:31:12.279
like, okay, so I really
have to make like a static class with

347
00:31:12.400 --> 00:31:18.039
a static function and that acts as
my or a static method and that acts

348
00:31:18.039 --> 00:31:21.359
as my function. He's like yep, so I mean now they have they

349
00:31:21.359 --> 00:31:23.759
have local functions. I'm not sure
how new they are, but uh,

350
00:31:25.160 --> 00:31:27.720
I just wanted to point out,
like for people who are listening to I

351
00:31:29.039 --> 00:31:33.200
agree with everything you guys are saying
like, it's there's huge value in kind

352
00:31:33.279 --> 00:31:40.680
of learning both of these paradigms because
and for me, I think it's stubborn

353
00:31:40.759 --> 00:31:45.160
and kind of ignorant to be like, oh, only functional programing is good,

354
00:31:45.240 --> 00:31:49.000
only class OP is good. I
think there's there's cool ways of solving

355
00:31:49.079 --> 00:31:55.440
problems with both both ways. But
I will say it's super hard. At

356
00:31:55.519 --> 00:31:59.480
least it was for me. Like
I spent years doing functional react hooks and

357
00:31:59.519 --> 00:32:02.920
now I'm right more C sharp,
and you somehow you keep you carrying like

358
00:32:04.039 --> 00:32:07.160
these functional ideas that just don't always
apply or they're just for the other people

359
00:32:07.160 --> 00:32:12.960
who have been writing OP forever,
they're like, why didn't you just do

360
00:32:13.119 --> 00:32:15.359
like this? And it's like a
super obvious implementation after you see it,

361
00:32:15.359 --> 00:32:21.359
but you just you're just, yeah, you're just stuck in one mode or

362
00:32:21.359 --> 00:32:24.799
the other. So for people who
are listening, if you're intimidated or whatever,

363
00:32:24.839 --> 00:32:29.759
it's I mean, it's all stuff
that we face every day, and

364
00:32:29.759 --> 00:32:34.960
and sometimes they're there. First of
all, there is no like one best

365
00:32:34.960 --> 00:32:42.559
solution. And then even even whether
you know you're doing object oriented or functional,

366
00:32:43.079 --> 00:32:45.480
even then, as Lucas was saying, there's there's so many different strategies

367
00:32:46.000 --> 00:32:53.480
and patterns that you can do to
solve these things that yeah, I don't

368
00:32:53.480 --> 00:33:00.839
know, I'm kind of rambling on, but yeah, I don't know where

369
00:33:00.880 --> 00:33:04.640
I'm going with that. I would
just yeah, I'm just saying like,

370
00:33:07.680 --> 00:33:10.559
yeah, I mean, there's volume
both. I guess it's the final That's

371
00:33:10.559 --> 00:33:16.000
what I'm trying to say. Definitely, definitely, definitely. But what about

372
00:33:15.839 --> 00:33:22.279
you guys? So I took thirty
one minutes to talk about my side.

373
00:33:22.359 --> 00:33:28.799
I feel like now I'm curious,
so we may even have to do like

374
00:33:28.839 --> 00:33:39.160
another episode just for each of you. Yeah, yeah, ok, yeah,

375
00:33:39.200 --> 00:33:43.160
I mean what I'm I'm working on, of course, I'm using React,

376
00:33:43.200 --> 00:33:47.119
but the actual what I've been pushing
in the last episodes is my video

377
00:33:47.240 --> 00:33:52.200
generator thing. But in terms of
React, it's nothing like specifically a framework

378
00:33:52.319 --> 00:33:57.000
or anything for React. I'm just
using it as my as the front end

379
00:33:57.039 --> 00:34:01.319
framework for the for the website.
And although I should say maybe that will

380
00:34:01.319 --> 00:34:07.359
get interesting, like in later episodes, I can mention or whatever. I'm

381
00:34:07.480 --> 00:34:10.360
trying to get into an electron app
because I think the type of app makes

382
00:34:10.480 --> 00:34:15.079
the most sense as a desktop app
because you need some like recording, screen

383
00:34:15.119 --> 00:34:20.559
recording and voice recording and all that
stuff, and I'm learning all the weird

384
00:34:21.400 --> 00:34:24.360
I never really learned electron, and
they have kind of a I'm sure it's

385
00:34:24.360 --> 00:34:28.119
not weird for experts and people who
have been using it, but they have

386
00:34:28.159 --> 00:34:32.079
a like you have your renderer and
then you have like the actual like node

387
00:34:32.519 --> 00:34:36.960
code. I don't really understand it. I have to the documentation, but

388
00:34:36.960 --> 00:34:39.800
but there there's some quite interesting stuff. It's I think it's mostly around security,

389
00:34:40.440 --> 00:34:45.119
but there's kind of like a messaging
bridge, so you make sure like

390
00:34:45.920 --> 00:34:50.360
because it runs in a browser and
you it's basically so like you can't expose

391
00:34:50.400 --> 00:34:58.719
the entire file system to like the
world as an example. But yeah,

392
00:34:58.960 --> 00:35:04.039
so I don't I don't have any
think like to too crazy react specific in

393
00:35:04.119 --> 00:35:10.320
my in my projects. You should
check out Taudi. It's a project that

394
00:35:12.199 --> 00:35:17.719
yes, uh, it's an alternative
to Electron, and from what I see.

395
00:35:19.280 --> 00:35:24.039
From what I see, it compiles
two really really really smaller bundle sizes.

396
00:35:25.760 --> 00:35:31.880
And I think the way that they
do this is because Electron compiles with

397
00:35:32.320 --> 00:35:42.320
the Chromium binary along with it,
and Taudi compiles in a way that uses

398
00:35:42.440 --> 00:35:49.960
the the browser engine that is native
to the environment. You're compiling two so

399
00:35:50.280 --> 00:35:52.280
and this is a gas actually,
but I think it's the only thing that

400
00:35:52.360 --> 00:35:58.880
makes sense because it generates bundle sizes
that are like three megabytes. That's awesome.

401
00:35:59.679 --> 00:36:02.440
Yeah, yeah, because that's the
one like the infamous thing about Electron

402
00:36:02.519 --> 00:36:06.400
yet, like yeah, it's super
cool. You can now you can build

403
00:36:06.440 --> 00:36:09.239
even desktop apps with JavaScript. But
that's always what everyone talks about, is

404
00:36:09.320 --> 00:36:13.840
you have like I think the minimum
is like two hundred or something like two

405
00:36:13.920 --> 00:36:16.440
hundred megabyte, so it's pretty high. I'm sure they've improved it, but

406
00:36:17.599 --> 00:36:22.559
yeah, cool. I will definitely
check that out. And I think they're

407
00:36:23.559 --> 00:36:29.840
I think they build not they bundle
not just for desktop, but for desktop

408
00:36:29.880 --> 00:36:35.159
and mobile, Okay, always a
bonus. Yeah, yep, cool.

409
00:36:36.559 --> 00:36:39.800
So yeah, just check it out
because I'm not sure if they if they

410
00:36:39.880 --> 00:36:45.159
have mobile support and are adding desktop, or if they have desktop and are

411
00:36:45.159 --> 00:36:49.480
adding mobile, or if they are
I have both because since then new rks

412
00:36:49.480 --> 00:36:52.880
you really want the desktop support then, so perhaps check that out before because

413
00:36:52.960 --> 00:36:58.679
otherwise may be better to go with
Electron just because like at the end of

414
00:36:58.719 --> 00:37:04.719
the day, is is the de
facto standard currently right, like everyone using

415
00:37:04.719 --> 00:37:13.000
it and is battle tested. M
okay, how about you, Peter,

416
00:37:15.119 --> 00:37:20.840
Yeah, not really much. I
kind of worked on articles like last week,

417
00:37:21.039 --> 00:37:23.239
I looked though some CSS. I
think it's be the kind of like

418
00:37:23.280 --> 00:37:29.400
the landmark of my week kind of
social meetings and CSS or kind of awesome

419
00:37:29.599 --> 00:37:34.559
boots. I think it's about texts
rapping on the risk right. I kind

420
00:37:34.599 --> 00:37:38.719
of released it on the refinance block. I think I worked on rounded corners

421
00:37:38.800 --> 00:37:44.960
and school bus and soso folks right
to not really much just fancy saisis Yeah,

422
00:37:45.880 --> 00:37:50.480
yes, okay, Peter, I
have a I have a question for

423
00:37:50.599 --> 00:37:54.480
you. This is like super general
about CSS. What do you what are

424
00:37:54.519 --> 00:38:00.039
your thoughts of the I don't want
to mess it up? Block l modifier?

425
00:38:01.280 --> 00:38:05.119
Is that? Like is that still
are people using that? Was that

426
00:38:05.159 --> 00:38:08.159
old school or I remember that from
like years ago? What do you think

427
00:38:08.199 --> 00:38:14.159
about it? Or yeah? Yeah, well the block Yeah, I think

428
00:38:14.199 --> 00:38:16.280
it's small in the old scoopacity if
we use it both the is it for

429
00:38:16.519 --> 00:38:21.679
okay if you don't kind of combat
on inline elements to like your block element

430
00:38:21.760 --> 00:38:24.960
as as, I think it's kind
of just in those cases, yeah,

431
00:38:25.199 --> 00:38:30.840
as I feel it's the kind of
just yeah, I just remember like I

432
00:38:30.840 --> 00:38:36.000
mean they are they are. I
understand the concept because like you're very specific,

433
00:38:36.000 --> 00:38:37.480
you know exactly where your style will
be applied. But I just remember

434
00:38:37.519 --> 00:38:42.880
you can end up if you're too
how should I say, if you're too

435
00:38:43.119 --> 00:38:47.639
flowery with your writing, you end
up with super long tags? Yeah,

436
00:38:47.719 --> 00:38:52.079
yeah, exactly. So I think
what once you need to understand. I

437
00:38:52.119 --> 00:38:55.719
think most of the time is we
just need to I think, like more

438
00:38:55.800 --> 00:38:59.880
in the elements that are kind of
default values. Right, so when men

439
00:39:00.079 --> 00:39:04.559
aidlines and events are block that kind
of I acknowledge. I think that will

440
00:39:04.599 --> 00:39:08.320
actually help you to actually know I
assigned that identifyer to for example, you

441
00:39:08.719 --> 00:39:14.440
just assigned like a block identify it
to destart this kind of pointless because you

442
00:39:14.519 --> 00:39:17.480
know it's kind of a block element, right. But then you may be

443
00:39:17.480 --> 00:39:22.320
a situation whereby we want to assign
something to like re spam or maybe like

444
00:39:22.400 --> 00:39:27.800
a paragraph, right, you need
to like put the identify and then yeah,

445
00:39:28.000 --> 00:39:30.840
maybe you want to kind of just
some kind of fancy stuff. Then

446
00:39:30.960 --> 00:39:36.920
yeah, we get so I think
it's it's still used though, but I

447
00:39:36.920 --> 00:39:43.440
think it depends on your knowledge on
how like the defaults the default to displays

448
00:39:43.480 --> 00:39:50.400
for all, like like elements,
right, Yeah, I honestly didn't even

449
00:39:50.840 --> 00:39:55.199
recognize the pattern when you said block
element modifier because I was so used to

450
00:39:55.239 --> 00:40:02.320
just saying Ben that I forgot what, uh what the letter is actually then,

451
00:40:04.440 --> 00:40:10.880
But yeah, it's funny that that
really is. It is going into

452
00:40:12.880 --> 00:40:17.519
like not deprecation, but very like
not used anymore for the community. Like

453
00:40:17.599 --> 00:40:25.280
it seems that everyone that was in
that train is migrating too. H every

454
00:40:25.440 --> 00:40:32.480
every the entire internet seems like yeah, yeah, exactly exactly, which is

455
00:40:32.480 --> 00:40:37.960
interesting because that, uh, that's
also connects to the topic of functional programming,

456
00:40:38.119 --> 00:40:44.360
like tailwind is not then, but
functional programming in CSS if you really

457
00:40:44.559 --> 00:40:49.119
think about it, I haven't seen
the source, so yes, so then

458
00:40:49.440 --> 00:40:54.559
would be the OP of CSS.
It's literally that because you have the block,

459
00:40:55.119 --> 00:41:00.519
which is a class, and then
you have the elements, which are

460
00:41:01.199 --> 00:41:06.519
properties inside the class. So this
is OP. You think about things in

461
00:41:06.599 --> 00:41:10.679
terms of objects, but in tailand
you think about things in terms of what

462
00:41:10.920 --> 00:41:16.559
they do and not what they are. So you think about utilities. You

463
00:41:16.639 --> 00:41:23.000
think this should be spaced like that, this should have display flax, this

464
00:41:23.119 --> 00:41:28.519
should et cetera, et cetera.
So it's like just a bunch of utilities

465
00:41:28.559 --> 00:41:35.840
that they don't give meaning, but
they give functionality. Yeah, I've never

466
00:41:35.880 --> 00:41:39.920
thought of styling like that way,
but yeah, yeah, I think that

467
00:41:39.920 --> 00:41:44.920
that that's kind of like a goodlogy
about it. Yeah, that's very good.

468
00:41:45.559 --> 00:41:50.519
Yeah, maybe maybe that's like your
resource or or something book or something

469
00:41:50.559 --> 00:41:53.760
about it. It's absin a little
good that's a little good analogy. I

470
00:41:53.760 --> 00:41:57.960
think that's that is kind of like
if we're good, it explains to some

471
00:41:58.719 --> 00:42:04.719
well maybe a yeah, an intermediate
or a bit seen that probably yeah,

472
00:42:04.800 --> 00:42:08.320
they will probably in a different light. Yeah that's true. Well wow,

473
00:42:12.880 --> 00:42:19.679
And I don't know if I just
said that at loud or if I read

474
00:42:19.679 --> 00:42:23.239
that somewhere else, because to me, it feels that that's how they should

475
00:42:24.639 --> 00:42:29.840
they should present TAILWIN. I think
that this is the easiest way for you

476
00:42:29.920 --> 00:42:36.519
to present tailwin. It's like the
tailwent website should say this is functional programming

477
00:42:36.519 --> 00:42:40.239
for c This is like the best
way for you to introduce it. And

478
00:42:40.280 --> 00:42:44.440
so I don't know if I'm just
if I just created that or if I

479
00:42:44.480 --> 00:42:47.760
actually read that somewhere. It seems
like pretty clear that it should be that,

480
00:42:49.639 --> 00:42:54.000
but yeah, yeah, I think
I think that's actually true. Want

481
00:42:54.079 --> 00:42:57.960
thing is that. I think the
will present it that way because it's kind

482
00:42:57.960 --> 00:43:01.000
of like for beginners, a little
beginnings kind of what can we throw into

483
00:43:01.119 --> 00:43:06.400
the problem on the standdown to place
set? Have you ever wished that you

484
00:43:06.480 --> 00:43:08.400
had a group of people that were
just as passionate about writing code as you

485
00:43:08.440 --> 00:43:12.599
are? I know I did.
I did that for most of my career.

486
00:43:12.639 --> 00:43:15.440
I'd go to the meetups, I
try and create other opportunities, and

487
00:43:15.440 --> 00:43:17.519
it was just really hard, right
the meetups. I got some of that,

488
00:43:17.599 --> 00:43:21.400
but they were only like once or
twice a month, and it was

489
00:43:21.480 --> 00:43:24.119
just really hard to find that group
of people that I connected with and really

490
00:43:24.159 --> 00:43:28.400
wanted to, you know, talk
about code a lot, right, I

491
00:43:28.440 --> 00:43:30.760
mean, I love writing code.
I think it's the best. And so

492
00:43:31.119 --> 00:43:37.920
I've decided to create this community and
create a worldwide community that we can all

493
00:43:37.000 --> 00:43:40.280
jump in and do it. So
we're going to have two workshops every week.

494
00:43:40.559 --> 00:43:44.079
One of those or two of those
every month are going to be Q

495
00:43:44.199 --> 00:43:45.960
and A calls right where you can
get on you can ask me or me

496
00:43:46.079 --> 00:43:49.840
and another expert questions. Uh.
The rest of them are going to be

497
00:43:49.880 --> 00:43:53.719
focused on different aspects of career or
programming or things like that. Right,

498
00:43:53.760 --> 00:43:59.599
So it'll go anywhere from like deployments
and containers all the way up to managing

499
00:43:59.639 --> 00:44:02.920
your Form one K and negotiating your
benefits package. Well, we'll cover all

500
00:44:02.960 --> 00:44:07.360
of it, okay. And then
we're also going to have meetups every month

501
00:44:07.440 --> 00:44:10.639
for your particular technology area. So
we have shows about JavaScript, to react,

502
00:44:10.719 --> 00:44:15.239
angular view and so on. We're
gonna have meetups for all of those

503
00:44:15.239 --> 00:44:17.360
things. I'm going to revive the
freelancer show. We'll have one about that

504
00:44:17.559 --> 00:44:21.880
right, so you can get started
freelancing or continue freelancing if that's where you're

505
00:44:21.880 --> 00:44:28.000
at. And I'm working on finding
authors who can actually do weekly video tutorials

506
00:44:28.440 --> 00:44:32.039
on some thing for ten minutes.
That's related again to those technology areas,

507
00:44:32.079 --> 00:44:35.880
so that you can stay current,
keep growing. So if you're interested,

508
00:44:35.920 --> 00:44:39.880
go to topendevs dot com slash sign
up and you can get in right now

509
00:44:40.199 --> 00:44:45.199
for thirty nine dollars. When we're
done, that price is going to go

510
00:44:45.280 --> 00:44:49.719
up to seventy five dollars, and
the thirty nine dollars price gets you access

511
00:44:49.840 --> 00:44:54.880
to two calls per week. The
full price at one hundred and fifty dollars,

512
00:44:54.960 --> 00:44:58.639
which is going to be seventy five
dollars over the next few weeks.

513
00:44:59.079 --> 00:45:01.760
That price is going to get you
access to all of the calls and all

514
00:45:01.800 --> 00:45:06.320
of the tutorials and everything else that
we put out from top Endevs, along

515
00:45:06.360 --> 00:45:10.159
with member pricing for our remote conferences
that are coming up next year. So

516
00:45:10.519 --> 00:45:16.119
go check it out top endevs dot
com slash sign up. Okay, so

517
00:45:16.599 --> 00:45:22.239
let's start wrapping things up. So
I don't even know if we want to

518
00:45:22.239 --> 00:45:27.880
do promos because the entire website,
the entire episode website, what the entire

519
00:45:27.920 --> 00:45:31.679
episode was about telling what we're working
on. So I myself don't really have

520
00:45:31.920 --> 00:45:38.400
promos. But Chris, if you
have anything to say, yeah, I'll

521
00:45:38.440 --> 00:45:44.599
just post it again. But it's
still each week I make no progress.

522
00:45:44.679 --> 00:45:49.920
So it's uh, but I should
be working on it a little bit more.

523
00:45:51.960 --> 00:45:57.920
It's my code video converter. Okay, what about you, Peter,

524
00:45:58.760 --> 00:46:01.159
Well, yeah, I want to
pour the articles I walked on on the

525
00:46:01.360 --> 00:46:07.639
chats. Yeah they published already and
just pissed it all right. I will

526
00:46:07.679 --> 00:46:14.000
send those links in the comments section
for all of you that stick up until

527
00:46:14.039 --> 00:46:19.960
the end as most of the yeah, most of the web. Why was

528
00:46:20.000 --> 00:46:24.800
the website? Why? Why is
my brainthinking of website that makes no sense,

529
00:46:25.440 --> 00:46:31.000
But did you walk on the website
this week that strode up until the

530
00:46:31.079 --> 00:46:38.320
end of this website. Thank you
because we really talked about some really complex

531
00:46:38.400 --> 00:46:45.639
things today. So yeah, congrats
on reaching the tuoter. Yeah, I

532
00:46:45.760 --> 00:46:49.639
saw you next week. Yeah,

