First a few words about yourself
He has been involved in programming for a long time, although he mostly dealt with cellular communication. Over the years, and switching, and the quality of the basic subsystem.
All the while doing some programs that make life easier for me and my colleagues. First of all on C ++ Builder (I note that I used the licensed version). Some of the programs, such as the software package for analyzing the quality of the basic 2G and 3G subsystem, are still used (PHP + JS, the "trick" is no longer in programming, but in using a variety of algorithms to search for problematic elements), although at the time of writing I haven't been working in cellular communication for 2 years now.
At the same time with all this, I always taught someone to something. First of all cellular communication. I even have a few “copyright” courses for teaching these very basics of cellular communication. But now it's not about them.
Therefore, I think it is not at all surprising that at some point I began to teach programming. What I do now: web programming based on PHP, Javascript, HTML, CSS. Learning is only individual. And I want to share this experience, my observations. It will be useful, I think, as a student of programming, and those who take the liberty to teach others.
')
To begin, I will answer the question “why does it take courage”. Because learning another must also be able. They say it works out quite well for me (as my wife says in such situations, “you can't praise yourself - you can sit like a spat”). And yes, I may not know something. But I teach so that the person himself will eventually be able to find the info he needs. My task is to give an understanding of the processes taking place so that the student has a holistic picture of what is happening in his head. And any exact names of functions and a set of their parameters can always be specified in the manual.
How is the training
The short answer is simple and monosyllabic: "remotely." Skype + TeamViewer. All necessary tools must be installed on the student's computer: Apache, PHP, mySQL or PostgreSQL, code editor. At the appointed time, we communicate in Skype, I connect via TeamViewer and the “process has started”. As a result, all codes remain with the student. He can analyze, refine, perform some homework. Yes, it is homework. If a student really wants to learn programming, he must work a lot on his own, and not just during lessons. If only because for serious study of programming it is necessary to literally “immerse” in it, as if in a dream. Very well written about this in the article
"Do not wake the programmer!" . I recommend to read, if someone has not read.
Generally speaking, I do not have an unambiguous and rigid “training program”. I teach everyone what he needs and at the level that he currently needs.
I also very strongly recommend students to read manuals on the language being studied. Read books. Read articles. Chat on the forums.
By the way, about the forums. This is also very useful for learning! But not just read, although it is also useful. Try to find the answer to the question asked by someone. It is likely that the answer is simple. And who will get the most benefit? The correct answer is: the one who did not know the answer, but found it and answered first. Why do you say so? Yes, it is very simple, it seems to me. If a person knew the answer, he will not learn anything new for himself. If this answer was received by the author of the topic in such a way that he did not think about it, then next time again he will not be able to solve the same problem. But the one who "did not know, but found the answer," really moved forward. And so, in short, you can go far.
And, of course, just to delve into the essence of forum discussions, sometimes turning into “holivarny wars”. On the “right” forums during such discussions, there are usually many pros and cons of something discussed in a particular topic. Studying the opinions of both parties will help to better understand the essence of the problem under discussion.
What I do not advise is video courses. For a programmer, they are evil! Because when studying programming, it is often required to pause, think, penetrate. And the video spurs, drives “forward, forward!”. In the end, it seemed to be something I saw, heard, but I did not remember much. Yes, you can look again. Once again. Once again. But it does not always get in the right place. If you revise after some time, it is even more difficult to find the necessary fragment, you will again look a lot superfluous.
And in the printed text, whether paper or electronic version, it is easier to find the interesting part. On paper, you can make notes, and in electronic form, you can very quickly search for some keywords.
Videos are good, for example, for studying work in a graphic editor. Because there, indeed, it is better to see than to try to understand by the written explanation. I looked - I repeated - you already know.
What are the students
I will try to make a small classification of students-programmers, good work, with different talked. Naturally, I do not claim to be absolutely right in this classification.
1. The fearfulCharacterized by the fact that he is afraid of studying something himself. Waiting for him to chew everything.
A rather rare type. In general, I was surprised, if not to say that I was in shock when I ran into this. I had one such student. In fact, he was afraid to study on his own. I will explain something to him, then I give my “homework”: read this and that. No, he says, I better be explained. And it would be okay to remember everything well. So with this, too, there were problems - at every lesson, part of what was studied earlier was repeated. Moreover, it was as if nothing had been said before.
I suffered with him for some time and said “Enough with me!”. On the one hand, from the point of making money, this is an ideal, eternal student. Which will never work independently and can be taught forever. And he even managed to take some order! And I decided that I would write this order for him, explaining along the way, what I was doing there. And he will look and, like, what to learn. Yes, it was here that I said "enough with me."
I do not know, maybe he became a programmer of the type "copy-paste", I do not communicate with him. And for more he is not capable. What I honestly told him. And it's not a stupid man, no! But programming is not his path.
2. Non-programmerThis is a completely normal person who can do something well. But here programming, as they say, "does not go." A person can honestly puff, sniff, conscientiously study all sorts of docks, do everything he is told to, including homework. But the process of learning is very slow.
It is very difficult to work with such students, and it is not easy for them.
3. prosharennyIt is best to communicate with such, although the most difficult at the same time. These are really Programmers, with a capital letter. People who themselves study all sorts of manuals, delve into everything. And they need the help of a teacher only at the initial stage, to disperse, to understand the basics. And they will read the details in the docks. Themselves, without prompts. And quickly understand a lot.
Why is it best to communicate with them, although it is more difficult? Because they do not let the teacher's brain become stiff. They are pushing me to study more deeply what I am teaching. I need to be able to quickly figure out what is not clear and how to explain to be brief and clear. Although, it should be noted, the “stitched” is most often understood at once. Understands and immediately begins to use.
The downside of working with such students is that they usually do not take long. Because then they themselves are already developing.
4. Just a programmerThis type of student also works in the process of learning, as well as the “prowled.” Most often already working as a programmer. Applies for training on individual issues, not "in general". Unlike the "prosharennogo" can not so quickly grasp the essence, but when he understood (and he understands quickly), he begins to actively use new knowledge in work.
Between the 3rd and 4th types of students, in fact, it is difficult to draw an unambiguous line. It is rather at the level of some inner sensation than by objective criteria. One of the few criteria described below.
5. BusinessmanSuch people, on the one hand, understand programming quite well. But, on the other hand, when they start programming, they quickly realize that they will be better at organizing processes than writing codes themselves. Therefore, after a while, such people stop practicing.
And that's right, I guess. Everyone should do his own business, which he gets better and to which he, as they say, "lies the soul."
His business is connected with the Internet, naturally, otherwise programming would not matter to him.
For me, training is a commercial event, so the financial result for me is important. Although the process itself should be interesting, it is quite clear.
What is interesting for me personally, the 4th and 5th types, is the fact that they sometimes, quite unexpectedly, receive orders.
For the 4th type, this is most often some kind of small script that a person is willing to pay for so as not to spend a lot of time studying. He will then return the money spent by making an order more quickly. Moreover, I do not just “give the script”, but give advice on its use and reuse. As soon as, and after some reasonable time after the execution of the order.
Type 5 businessman, can also make orders. But he simply uses them, but does not embed them in his scripts. Due to the lack of the latter.
Recommendations for students who want to become programmers
Think whether you need it! No, I'm quite serious. There are many other professions in the world that are not worse than programming. According to smart people, if we consider the tendency of people to do any work, then about 5% of people are very inclined (the type “prosharitelnye” from my list), about 5% in general (in no way to this matter, “non-programmers” classification), the remaining 90% are prone, but to varying degrees. By the way. I relate myself, rather, to the middle of the 90%.
If suddenly you, programmers, find yourself in these 5% who are “not inclined”, then do not waste your time in vain. I am sure that you can do something else that you can do much better.
Oh well. Are you still sure that you get into those same 90% and even closer to 5%, which are "programmers from God"? Well, then we think further.
What is needed in order to become a programmer?
* Understanding why this is necessaryFrom this we must begin. Why do you want to become a programmer? Do you think that programmers are "rowing money with a shovel"? Or maybe they have already tried and enjoyed it? Want to work on a free schedule? A friend is good at it, but are you "not worse"? Think about what your ultimate goal is and what you need to achieve it.
* AbilitiesI have already spoken about them, I repeat. We must have a certain tendency to programming. Without it, nothing happens. This is neither good nor bad, it’s just a fact to be reckoned with.
* Ability to learn. Desire and perseverance in learning. PurposefulnessWithout them - nowhere. However, as in any case, not only in programming. As they say, “be at least seven spans in the forehead,” but if you do nothing, you will not learn anything. You also need to be ready not only to do, but also to redo. Because such a phenomenon is well known that when a programmer looks at his code written earlier, he usually sees how it can be improved. And in some cases, such improvements make sense. Well, for example, did "something." And then I studied a certain library, which I did not know about earlier. Which gives additional features. Scratched the head, thought, rewrote.
This also can be attributed to the fact that a lot of information can be gathered from different books and manuals. It is only necessary not just to read, but to try to put it into practice. At least in the form of small test scripts. You read a book and try one, the other, the third ... But then, when writing real scripts, you have many possibilities in your hands. With which you can juggle as you wish - provided that you have a good idea of ​​what you are doing.
* ComputerIt is clear that he is needed. Which is better? Personally, I prefer to work behind a laptop. Used to for many years. If I go somewhere, to the village, to the office, home or somewhere else, I take everything with me “in one bottle”, i.e. in a laptop. I have a HP, with a 17 "monitor. Even with this sometimes you want a bigger screen.
Perhaps you like the stationary computer more. If only because the laptop monitor is usually not so big. In any case, RAM, processor, disks - there are not many of them, so the more the better.
* ProgramsBetter or obviously free, or buy a license.
And which programs? Any servers, such as Apache or IIS, compilers and interpreters - it goes without saying. I will not talk about them in detail.
But here it is necessary to say about that - never save on tools! A programmer's tool is not only a computer, but also the editor in which he “kodits”. You can not save and use Notepad or other simple text editor. A full IDE is just what you need. So that the code highlighting was both syntax checking, and searching for a place to define a variable or function, and hints on function parameters, and much more. Yes, if you have only 3 files in a project, then this is not necessary. But if the project is serious, in which there are tens or hundreds of files, then the IDE will allow you to work quietly, while Notepad lovers will spend a lot of time in vain.
I do not specifically name any specific IDEs because there are many different ones, one like one thing and another another. Each has its own "chips". And all of them, essentially, are paid. I repeat: do not save on tools. It is better to spend money on a good tool than to lose time and money when working with a bad tool.
On this, I think you can finish the argument. Only those who are willing and able to learn will go on. And those who changed their mind are also great. We must be able to stop in time and spend our strength on what is going well.