How to teach your girlfriend to program if you are not a teacher, but she believes in you

 3r33479. 3r3-31.
How to teach your girlfriend to program if you are not a teacher, but she believes in you 3r33434. 3rr3465.  3r33479.
3r33434. When your boyfriend is fullstack
3r33434. 3rr3465.  3r33479.
Working as a programmer and living in a five-minute walk from the office, it is extremely difficult to have time to “move away” from work, moving away from work. 3r33434. 3rr3465.  3r33479.
I think many people know it: for the last half hour you have been sitting and thinking about an unclear error that came from whence and, as a result, without solving the problem, you check that all your commits have flown to the corporate repository, turn off the car and exit the office, knowing that tomorrow morning, with a fresh mind, everything will be decided. 3r33434. 3rr3465.  3r33479.
As if not so! 3r33434. 3rr3465.  3r33479.
Of course, the decision comes at the wrong time: someone gets behind the wheel, someone in the tram, someone lucky enough to work near the house, somewhere in the courtyard, and even in the elevator. In my case, the flow of thought following the decision is poured on a girl who, well, in programming, as they say, does not kick her tooth. 3r33434. 3rr3465.  3r33479.
Then one day she comes to you and solemnly declares:
 3r33479. - I'm ready! Ready to learn programming! Come on! 3r33434. 3rr3465.  3r33479.
In this article there will be no source codes, in it I will try to answer the questions that stood before me at the planning stage of the programming course for my own girlfriend. 3r33434. 3rr3465.  3r33479.
About how, having no practical experience in training, I decided to introduce a person into programming who explained that “you are smart” and “we will succeed”, I will tell you under the cut. 3r33434. 3rr3465.  3r33479.
Welcome! 3r33434.
3rr3465.  3r33479.
What for? 3r3408. 3rr3465.  3r33479.
To this seemingly absolutely fair question I received an equally fair answer: 3r-3465.  3r33479. - You are still constantly talking about programming, and at least I will understand you. 3r33434. 3rr3465.  3r33479.
Fair? I'm not sure that this is a good reason to become a programmer, even if not a professional one. On the other hand, I am deeply convinced that in the future, perhaps not so distant, programming, if it does not become something everyday, it will at least make a very serious step in this direction. And as you know, you can not stop the chaos - lead it! 3r33434. 3rr3465.  3r33479.
So, having enlisted the support of my girlfriend, and the hope that I got a little bit from my grandmother, who was once a teacher, I sat down to draw up a training plan. 3r33434. 3rr3465.  3r33479.
Bicycles - our all 3r3408. 3rr3465.  3r33479.
Of course, it was possible to google tutorials on creating something simple on some conditional python, but, as often happens, I love bicycles, which means that someone’s course will not work for us - we need to do it ourselves. 3r33434. 3rr3465.  3r33479.
In fact, of course, like any cyclist, I immediately found many reasons not to use existing solutions. And, perhaps, someone will find them not objective, but I do not pretend to be the last resort. So what’s wrong with a bunch of free online courses? 3r33434. 3rr3465.  3r33479.
Programming languages ​​
3rr3465.  3r33479.
Teaching programming Russian-speaking person need, of course, in Russian. Many terms that we regularly read in the documentation for the stdlib of the next language are perceived by us, professional programmers, intuitively: 3r388. statement , 3r388. expression or even 3r3r888. parse - this is something that we do not have to translate, even if our level of English implies translation, and not an instant understanding of the text. To a person who is not connected with programming or even simply with IT, many of our terms will simply break their heads, completely beating off the desire to continue learning. 3r33434. 3rr3465.  3r33479.
There are many courses in Russian, but all of them, in my opinion, are not suitable for an ordinary person. Why? 3r33434. 3rr3465.  3r33479.
First of all, for the most part, these are either web programming courses (3r3-3452. PHP
, Etc), or your best to your enterprise (3r3453 .???.33. ??? .3453., Etc), ??? .3. .C #
, Etc), or it is
/ C ++ 3r3453. - All this is not a cake for a beginner. 3r33434. 3rr3465.  3r33479.
The first category usually does not teach
proper programming
, offering for a few lessons to make the finished product - the site usually. I see nothing wrong with that,
if the purpose of a person is to create a
website. but let's be honest: such courses will give you a certain architectural pattern (MVC, most likely), a code base for several modules, and that’s all - no knowledge. It is thanks to these courses that we have so many stupid questions in the telegram channels and forums devoted to some language or technology. And it is impossible to blame the newly-minted programmers for these stupid questions - they did not receive basic knowledge, hence all the troubles. 3r33434. 3rr3465.  3r33479.
As for the other two categories, again, I believe that this is not what a newcomer should start with. 3r33434. 3rr3465.  3r33479.
I remember how fellow students at the university ran into the topic of pointers. Most of them still do not understand anything about it, and yet they were couples: a living teacher, the possibility of dialogue, the duty to practice - all the conditions. 3r33434. 3rr3465.  3r33479.
By the way, if I am not mistaken, then I am the only one of my course who works in the specialty. I think that contributed to this study in school
simple, understandable and giving basic understanding. 3r33434. 3rr3465.  3r33479.
Bearing all these thoughts in my head, I came to the conclusion that the best language for learning, in my opinion, is
today. Go
: a simple syntax, strong static typing, the ability to start work without dancing with a tambourine and, which is important, collect under any platform without the same dancing - all this makes
ideal candidate for the first programming languages. 3r33434. 3rr3465.  3r33479.
It is worth adding that before this I did not write on 3r3452. Go
, but for work I just needed to write a fast multi-threaded web service, and this meant that I could train my girlfriend, while at the same time learning myself. 3r33434. 3rr3465.  3r33479.
It was here that it turned out that materials for teaching a person programming from scratch to
in runet no. There are wonderful tours, specialized sites and everything, everything, everything that will allow you to master the language in a day or two, if you already know how to program. But she - can not. 3r33434. 3rr3465.  3r33479.
Hello bike 3r33434. 3rr3465.  3r33479. 3r3163. Practical value
3rr3465.  3r33479.
As a result, most of the courses offer you to have in your cozy home repository either an arbitrary number of scattered examples, or a finished product, usually not necessary for you. 3r33434. 3rr3465.  3r33479.
Of course, the free course “Simple Shop at
”Is an experience, however, as I have already said, in practice it is only useful for a person,
wishing to have a shop
, but not willing to hire someone to develop it. 3r33434. 3rr3465.  3r33479.
In fact, the newcomers who have completed a similar course will not make any progress in programming. 3r33434. 3rr3465.  3r33479.
In my opinion, the ideal option for a novice developer would be exactly
learning the basics of programming
, but by the example of creating
interesting product
. 3r33434. 3rr3465.  3r33479.
Developing a project from scratch will allow you to acquaint a person with all the stages of the project’s life from, I apologize for the tautology, its design - before deploying in a combat environment and subsequent support. 3r33434. 3rr3465.  3r33479.
In this case, the student should not receive ready-made architectural solutions and, especially, source codes. All this should be a product of studying the relevant aspects of the development. 3r33434. 3rr3465.  3r33479.
But what might interest a girl?
3rr3465.  3r33479. I wrote my first program (apart from what we wrote in class) for my younger brother when he began to learn the multiplication table: entering a range of numbers, randomly outputting two of them to my brother with a suggestion to enter their work, test and so on in a circle. 3r33434. 3rr3465.  3r33479.
It was probably my seventh grade. At this age, writing a useful (at least some) program was happiness for me, that is, I was
. But to interest a seventh-grader in writing a primitive “calculator” is easy, than to interest 3r33428. adult girl
? 3r33434. 3rr3465.  3r33479.
The idea came, as usual, from everyday life. Once again, she asked me to write the proportions of ingredients in a notebook. 3r33434. 3rr3465.  3r33479.
Honey, we urgently need a bike! 3r33434. 3rr3465.  3r33479.
Large and with a stroller
3rr3465.  3r33479.
We have long wanted to start a book of recipes, because she likes to experiment with me, and these experiments are often very successful. 3r33434. 3rr3465.  3r33479.
But is it really just a recipe base? 3r33434. 3rr3465.  3r33479.
Of course not! 3r33434. 3rr3465.  3r33479.
3r33434. What 3r33429. , 3r33434. which is
and in 3r33428. what order is
We will write, I understood at the same moment. 3r33434. 3rr3465.  3r33479.
3rr3465.  3r33479.
What we start with
- it was decided before it became clear that we would write. Now it was possible to decide on what exactly
would be responsible for. Go
. 3rr3465.  3r33479. 3r33434. API
. Of course,
! 3r33434. 3rr3465.  3r33479.
The language allows the standard library to raise a simple http-server, which will be a layer between the database and clients. 3r33434. 3rr3465.  3r33479.
By the way, it was decided to use
as a database. PostgreSQL
- an excellent language for the development of the logic of working with data, plus we can touch
which, in general, is quite similar to
so, at the backend development stage, we can already learn three languages ​​to one degree or another. 3r33434. 3rr3465.  3r33479.
3rr3465.  3r33479.
Since in this situation there are no deadlines, as well as individual development teams, we can afford to start the frontend after our server part is complete. 3rr3465.  3r33479. Why so? 3r33434. 3rr3465.  3r33479.
Firstly, it will allow you not to switch between too many languages ​​and technologies for a beginner. 3r33434. 3rr3465.  3r33479.
Secondly, we need to teach a person into architecture. Therefore, let them first develop a full-fledged backend, and only then go to the client. 3r33434. 3rr3465.  3r33479.
As for the client, the choice for me here was also obvious. 3r33434. 3rr3465.  3r33479.
Ignore the trend at
- stupid, because we do not have tons of Legacy code, in addition, some of these frameworks are extremely easy to learn. 3r33434. 3rr3465.  3r33479.
It is about
. Of course, one could use
or a more exotic solution like
but it seems to me that these technologies are for more than 3r33428. mature
developers. 3r33434. 3rr3465.  3r33479.
In addition, the client part will be written on 3r3452. TypeScript 3r3453. . Probably, many will disagree with me, but still I believe that dynamic typification is, though good, but good only in the hands of those who are
understands what typing is
at all. 3r33434. 3rr3465.  3r33479.
That is why to continue learning, it seems to me, more correctly in a language with static typification. It is in the language, therefore,
not considered. On the other hand, I wanted to maintain the maximum compliance with
without taking the girl to
CoffeeScript 3r3453. ,
etc. 3r33434. 3rr3465.  3r33479.
Speaking of the frontend and the modern stack of technologies, one can not forget about 3r3452. Progressive Web Application
). 3r33434. 3rr3465.  3r33479.
In my opinion, this is the ideal technology for learning, or, more precisely, to interest the student. 3r33434. 3rr3465.  3r33479.
Own application in a mobile phone regardless of the platform? Do not need to learn difficult for a beginner languages? This is a great motivation, perhaps one of the best, I think. 3r33434. 3rr3465.  3r33479.
Therefore, our frontend should, in addition, satisfy all the requirements for
PWA 3r3453. . 3r33434. 3rr3465.  3r33479. 3r33333. Common language
3rr3465.  3r33479.
The last question I could find the answer to was the format of the client’s communication with the server. 3r33434. 3rr3465.  3r33479.
On one side, as otherwise, was
with all its advantages and disadvantages, and on the other -
. Offer clean
I didn’t want to, as this entails certain problems that gave rise to such solutions as
. However,
itself. GraphQL
, in my opinion, is also not a good technology, although it is of some interest. But again, the interest for me, for other developers - yes, but for a beginner
, as a way to solve the problems associated with the use of the classic
, it won't be interesting, because the newcomer doesn’t know all these problems, does he? 3r33434. 3rr3465.  3r33479.
Why not try
? 3r33434. 3rr3465.  3r33479.
Of course, thinking through your own implementation goes beyond learning the basics of programming, but writing is by no means. Therefore, it was decided to secretly invent your own bike, and offer to implement it in the framework of the project. 3r33434. 3rr3465.  3r33479. 3r3407. Results 3r3408. 3rr3465.  3r33479.
What we have to go:
3r33434. 3rr3465.  3r33479. 3r33417.  3r33479.
First, you need to develop a server-side architecture;
Then meet and design the database structure;
Having a database, we begin to study
and writing server
Next comes the introduction to r3r3452. HTML
Having mastered the basics of layout, quickly parse the syntax
TypeScript 3r3453. ;
Having dealt with
TypeScript 3r3453. , we start writing frontend on
We are finalizing the frontend to the level of
PWA 3r3453. .
3rr3465.  3r33479.
For me, this is the first human learning experience in programming. Perhaps this approach will show itself not as I see it in my own head. 3r33434. 3rr3465.  3r33479.
However, I hope that he will still justify himself, and my experience will be useful to someone who will fall into the same situation. 3r33434. 3rr3465.  3r33479.
Thanks for attention! 3r33434. 3r33475. 3r33479. 3r33479.
! function (e) {function t (t, n) {if (! (n in e)) {for (var r, a = e.document, i = a.scripts, o = i.length; o-- ;) if (-1! == i[o].src.indexOf (t)) {r = i[o]; break} if (! r) {r = a.createElement ("script"), r.type = "text /jаvascript", r.async =! ? r.defer =! ? r.src = t, r.charset = "UTF-8"; var d = function () {var e = a.getElementsByTagName ("script")[0]; e.parentNode.insertBefore (r, e)}; "[object Opera]" == e.opera? a.addEventListener? a.addEventListener ("DOMContentLoaded", d,! 1): e.attachEvent ("onload", d ): d ()}}} t ("//"""_mediator") () (); 3r33473. 3r33479. 3r33475. 3r33479. 3r33479. 3r33479. 3r33479.
+ 0 -

Add comment