Preface: This is a story about books for those who decide to study programming on their own. But since reading the list of books would be boring, I decided to supplement it with my biography.
So ... I'm over forty. By education a linguist, I work in the scientific field. I never encountered programming, although formally I had lessons in computer science at school, which, in fact, were reduced to a set of programs in BASIC from the manuals and to the contemplation of the mysterious DOS on the teacher’s computer. Oh, yes, there was still a very brief acquaintance with Fokal, but, again, everything is strictly on the training manual.
')
I am an orphanage, so after school I managed to enroll in a quota at a local university in the Faculty of Agriculture. Education ended exactly one year due to dislike of the chosen discipline. Actually, it is hard for me to imagine that most people at the age of eighteen are able to define their professional and life purposeful goals precisely. I read biographies of people like Ilona Mask, who began programming from the cradle, or the founder of Teranos, who, at the age of five, organized her home chemical laboratory.
Most people, like me, however, are a flock of animals following the trends. We enter the university not because of a craving for knowledge, but simply because everyone is doing it. Well, nobody particularly wants to join the army either. There are more lucky individuals who purposefully enter promising universities for promising specialties on the advice of parents, but this is again a matter of luck, connections and money. As a child, I loved watching “Clever Men and Clever Girls” and, to be honest, it was hard to imagine that, say, children serving sentences or people suffering from alcoholism could participate in this program en masse.
The country was actively preparing for the second Chechen campaign and all the restless and idlers were massively taken to the recruiting stations. I decided not to torture fate and went to the other end of the country away from the draft board to work as a laborer in the port. I have a rather slow brain, so only after a few years of productive communication with the “wounded” intellectual majority and with their more successful counterparts, who have already embarked on the path of success, I realized that the prospect of being a powerless worm at the bottom of society is a very dubious pleasure . Higher education was the only door up the social ladder.
So, I entered the linguist. Why? Because the local university taught linguistics and because the target faculty had budget places. Linguistics ... Very interesting specialty. Linguistics is the science of the structure of a language, but, as a rule, the overwhelming majority of linguists hardly know their native language, not to mention foreign. The father of modern linguistics, Noam Chomsky, speaks only English and understands a couple of Hebrew phrases, however, this did not prevent him from developing a powerful theory of grammar of languages, which is actively used by millions of people working in the field of linguistics.
And this feature of linguistics was my chance to step onto the next step. If the university graduates hundreds of similar specialists with a basic set of knowledge in accordance with the requirements of the Ministry of Education, then the best way to stand out from the crowd would be to learn a couple of foreign languages. I didn’t want to miss my studies at the university, so I had to quit my job at the port and get to school as a night watchman. 4000 rubles per month. Every day, oatmeal and pasta. But, on the other hand, the mass of free time, which I used for homework and studying additional specialties. In addition to the English taught at the university, I decided to learn French. Why? Because it is the official language of diplomacy, the second language in the UN and, in the end, the language of economically developed countries.
Taking a French tutorial in my hands, for the first time in my life I asked myself a question: in fact, do I have language skills? Where did I get the confidence that reading a book and doing all the exercises would not be a waste of time? The job of a guard with a beggar’s salary could be changed to a merchandiser in a nearby shopping center or to a warehouse worker at a brewery, but in this case I wouldn’t have time to educate myself. In general, I took a step towards the unknown.
Work day after three. Rewriting lectures. Homework. Coursework. Tutorial in French. Two years later, I reached the level that allowed me to read small newspaper articles and write simple essays. Conversation and hearing were a major problem, so I had to sign up for language courses and sit on porridge from morning to night. A year later, I passed the exam at B2 level, which allows you to enroll in foreign universities.
The question of language ability remains open. Why did I learn French? Because of perseverance or because of genetic abilities? Or together because of those and others? My thoughts were interrupted by a call to the dean. “Do you have a DELF B2? That's fine. We have an agreement with the University of Brest on the exchange of students. You will go for three months. ”
In the company of several provincial majors I went to Brittany. Scholarship 500 euros per month, the end of porridge. Brest is a provincial city of average scall, in which, apart from the port, there is no entertainment. My teammates spat on school from day one and drove off to Paris. And I regularly went to lectures, after lunch to the laboratory, where I volunteered as an assistant on a voluntary basis. Contact with the teachers was established.
Return to native provincial backwater. Conversational French allowed to get a job in the department of international cooperation in his home university. Another two years. Diploma. Release. I'm thirty. The military registration and enlistment office hands me a military ID with the note “ordinary stock”. I'm going to Rennes for a master's scholarship program. 750 euros per month, a couple of years of lectures, exams and internships. I am offered to pass a competition for a state contract for writing a dissertation. Competition successfully passed. Four years, 1600 euro per month after taxes. Thesis is protected. I'm going to Shanghai, this is my first postdoc.
1000 euros per month. For China and even for Shanghai, a reasonable salary. However, this is my ceiling. Career growth is possible, but it will require tremendous effort. An applicant for the position of assistant professor should have a stock of several dozen publications in decent journals and work experience in several countries. Began a period of heavy thought. Despite years of effort and an advanced degree, I found myself at the level I would have had without French and oatmeal. Moreover, despite the rather deep knowledge in linguistics, I did not like this profession.
The prospect of being an eternal postdoc and doing an unloved business did not please me, and quite often I began to get depressed. To bring the brain in order, I started to play sports. First day. Run. 100 meters. I'm dead. I have never run in my life, bypassed the horizontal bars. I was the favorite goal of the scamps. However, the one hundred meters gave its fruits: there was no depression. The brain began to work and analyze reality.
The film "Touch of Sin," an episode with a factory worker, thrown out of the window because of hopelessness. I can run 1 kilometer. I read a critical article about the film. Three kilometers away. The scenario was based on real events that took place at the Foxconna factories, known for their inhuman working conditions. Five kilometers, lead thighs, but I think I can run a couple more. Terry Gow announces a reduction of the Foxconn staff and the creation of a fully automated enterprise.
I stopped. I have an afterburn. Here it is, the trend. The world is rapidly moving towards total robotization. Carrefour replaces cashiers with automatic scanners. Cathay Bank is reforming its customer service department in the same way. Paris subway workers are on strike because of the opening of a new automated branch. I have to start learning programming or stay forever.
I have always sincerely believed that all people have their limits in the field of learning. And I always thought that programming is a restricted area, which I am not allowed to enter. Despite my age, I remember very well the feeling of the sobering stupidity that I had every time I typed programs from the manuals on the keyboard of school computers. The comrades managed the task in five minutes and even managed to write some additional lines that made the computer squeak with a speaker and blink the cursor. However, I was sweating aside and could not even start the program from the training manual.
Sport and a longtime job as a guard have changed my attitude to this issue. If I can overcome myself and run eight kilometers, if I can patiently sit behind a French tutorial and write exercises for hours, then I can certainly learn programming. Well, if I can't, then at least I will try.
So, what to teach, where to start? Quora, StackExchange, Habr. The most popular and popular languages ​​are: Python, Java, JavaScript. I definitely do not want to learn web programming. To sculpt beautiful Saitics against the background of a stinking Chinese smog and beach covered with plastic bottles is, in my opinion, the height of bigotry. Virtual reality must be true.
In general, the choice fell on Python. Everyone says it is a very easy language. This is exactly what I need. So, the Dawson book. I got to cycles and I'm sick of it. Somewhere deep inside I sat awareness of dissatisfaction with the chosen course. Moreover, the author chose the spelling of the game as the main motivator for language learners. On the one hand, the war in Syria, millions of refugees, terrorism, global warming. At the same time, adults with a solid fundamental education sit in easy chairs and write games. Yes ... But, nevertheless, Dawson's textbook is still very clear. And the IDE offered along with the book makes it easier to get familiar with the language.
In terms of knowledge, I did not learn anything useful from the book, on the contrary, I had even more questions. For example: how to write the operating system and how it is written to the hard disk. How is the transfer of messages over the network? Why do dos poor graphics, while windows have 16 million colors? Dawson's book had to be put aside and again lost in thought.
There is one German film called “Who am I.” The hero of the film wants to join the company of hackers and they ask him to demonstrate their knowledge. They say: there is a power station outside the window, turn it off. Hacker candidate sits at the laptop and dials the code on the keyboard. People standing behind him say respectfully: oh, you know how to low level! Are you with us. Here this phrase is pretty deeply ingrained in my brain. Low level ... It seems that this is the key to the answers to my questions.
So, learning programming will have to learn from the beginning, from the assembler. Quora, StackExchange, Habr. A set of books on the assembler. A few weeks to read each tutorial. The abyss of hopelessness. Each book offers to learn assembler from the perspective of a high level language, most often C. Pedagogically, this is not true. This is how to suggest that Russian learners first master the syntax of complex sentences, and then go to the alphabet. From here, by the way, the second problem also follows: the author assumes that the assembler student is not a noob and knows what and where you need to click to launch the debugger, and indeed in what development environment should the code be written. Oh yeah: textbooks mainly focus on FASMe or TASMe, when it comes to Russian authors. I have never seen Linux, so there is a cross on FASM. TASM doesn’t have a clear development environment, so there is also no.
A few weeks of searching online have been crowned with success. I found a book that could be placed under the heading "mind-altering". Kip Irwin, seventh edition. Why is this book so good? Irwin is a musician by training, moreover, with a dissertation, which did not prevent him from returning to university as a programmer in adulthood. He taught the language himself as a hobby, so he understands all the difficulties that a beginner can face. His textbook explains everything: where to click, what to see, how to install. Excellent introductory course in Visual Studio, MASM, DOS and a bit of C ++. And most importantly - this exercise.
I am a postdoc, I work in a dust-free lab, my boss doesn’t get bored and doesn’t make me work overtime. Evening time from six to twelve is given to assembler and programming in general. The first exercise is like my first hundred meters. The main thing is to realize that programming and, in general, finding a solution to a problem is a non-algorithmic and non-linear process. This process requires unpredictable time: maybe a couple of minutes, and maybe a few days. The main thing is to remember your previous success: if I last decided an exercise with two asterisks, then I will decide this time too.
Together with the first solved problem, an understanding came that programming cannot be taught. You can learn a couple of hundred algorithms, but all the time will come the day when you need to create something new. And here no Donald Knut will help. Is it possible to develop programming skills? Lomonosov said that the best exercise for the brain is math. Therefore, in the appendage to the assembler, it was necessary to refresh the knowledge of matan and begin to study discrete mathematics. Again flour choice, but already easier. Matanalysis, Stuart textbook, sixth edition. Discrete Mathematics, Kenneth Rosen, Seventh Edition.
There are a lot of discussions on the network about the uselessness of asma. I am extremely pleased that I learned the basics of this language. Low-level programming allows you to understand things that are not obvious to high-level languages, such as the work of the memory stack and why it overflows, what is dangerous about recursion, the fundamental meaning of a linked list for memory storage systems, etc. The main thing is that asm teaches a careful attitude towards computer resources and, accordingly, to energy consumption. If I were a billionaire, I would love to invest in developing systems like MenuetOS. Well, or at least shook the hand of their developers.
Nine months on Irvine, familiarization with FreeDOS, studying the standard C library and the first steps in C ++. A brief introduction to SSE technology in the Kusswurm directory. The boss calls me to his office and declares that my dubious success in the scientific field does not allow him to extend my contract. Not surprising: my colleagues from morning to night sweat over projects, forget about their personal lives and fight to the death with editors and reviewers for each article, and I sit out the contractual time in the laboratory and run home to play around with an assembler, and generally think more about programming than about work.
In general, I have six months before the dismissal and I need to add gas. Putting discrete mathematics aside. I need to start learning a high level language and the choice falls, of course, on C ++. I'm already on “you” with Visual Studio, so everything should be easy. By the way, C is a subset of C ++, so you can kill two birds with one stone.
Crosses. In my opinion, there are a couple of worthy textbooks: Prata and Deytel. Prata places quite verbose. Deitel is simple, but explains everything from the point of view of the PLO. With these textbooks began my first immersion in the world of objects. Since my brain was hopelessly corrupted by an assembler, I used the textbook of Deytel only as a source of additional information. The author devotes an entire chapter to describing the "strength, power and beauty" of the PLO, while not bothering to describe the shortcomings of the concept. For example, Irvin openly says in the introduction that writing software in assembler is an unhealthy idea, but everyone should know the assembler. Prata is also not excessive and describes the PLO rather moderately. Deitel says: OOP is cool, so we will use it. 2 + 2? No problem: create a class, a couple of constructors, inherit the methods, and overload the operators. Answer: 4.
A man came to the restaurant and ordered spaghetti. The waiter brought him a spoon, a fork and a straw. The client thinks: well, once they brought a pipe, then it should definitely be used. And it begins to suck in macaroni. Simple, powerful and beautiful. This is not a criticism of the PLO, it just seems to me that everything has its uses and limitations. OOP is probably good in graphics, where each object on the display corresponds to an object created on the basis of the description in the class. But here I recall the book of Abrash, who wrote games in pure assembler. Or Xavier Niel, owner of the French mobile provider Free. He founded the school "42", where applicants, after several months of preparation, are invited to write a video game in C. You can do without the PLO.
Another language problem is pointers. Hundreds of articles and angry letters to the editor are also devoted to this topic. A pointer in assembly language is a very simple thing and does not require any special brain to understand. Implementing pointers in C / C ++ is really a problem. I do not want to dwell on the intricacies, I just want to say that pointers with castes and a dozen asterisks between brackets really cause fainting. Why it was impossible to come up with something more intelligible like ESI / EDI and square brackets?
A week before the layoff. Linguist. More than a college degree. Absolutely useless creature in the labor market. I have a choice: either go looking for a job, or spend the accumulated money on travel and leisure. China is still a beautiful country. Gansu, Qinghai, Xinjiang, Karakorum Highway. My CVs sent out a few months ago went unanswered. I sit in the laboratory and review the site of the university. "The laboratory of artificial intelligence is looking for people with a master's degree and programming skills." They answer me in five minutes. Rendezvous in an hour.
The boss is interested in my past and asks a couple of questions about my motivation.
He is a statistician by education, never programmed, so he calls his postdoc to test me. Algorithms for converting phrases and searching for words are easy. Genetic methods and Markov models ... uh, complete zero. The chef says to me: you have as much knowledge as a standard self-taught person could have. The assembler does not count, it is useless. But he gives me a chance, because I have the knowledge of foreign languages ​​and the ability to learn. He is working on a corpus of Chinese and is going to expand towards Indo-European languages. Sitting next to a postdoc says that you have to learn patterns. OOP is inevitable as the collapse of imperialism ...
So, the first day. Development environment - Visual Studio. Language - With Sharpe. My task is to study the software they started working on ten years ago. The syntax of the language is close to C ++, but there are a lot of unfamiliar methods, so I have to look for a textbook and solve the exercises again. This time the choice falls on the Bulgarian textbook written by the founders of Telerik. An excellent book for those who want to learn both language and algorithms at the same time.
Prata, by the way, described the queues and stacks, but this was done in a non-imperative style: they say, let's solve this problem with the help of the stack. And what kind of stack it is and where it came from is not known. Bulgarians describe each algorithm and explain which range of problems can be solved with their help. I used to read threads on StackExchange at the dawn of my youth and often fell into a stupor from phrases like “black and red trees”. Now I am also falling, but at least I can imagine what a tree is in general. The Bulgarian textbook had to be supplemented with a book by the Pole Marcin Yamro. Pure algorithms, everything is simple and clear. Patterns: Judith Bishop.
Artificial intelligence and the body of the Chinese language. Sharpe is not enough. Need to learn database. SQL, Agarwal reference book. Great book, clear explanations. The algorithms and databases are followed by the Petzold textbook on WPF and the WPF Cookbook. XAML is easy to learn, but the bindings and MVVM that come with it are not yet understandable.
Year of work in the development of artificial intelligence as a junior. That is, in an academic environment there is no such thing as a software engineer. We are all research assistants. Everyone has their own project, and how it will be implemented is a personal matter for everyone. I already mentioned that my boss never programmed. For him, the main requirement is integration with previously written software, everything. I sometimes talk with colleagues who have previously worked in a corporate environment. Apparently, we have a rather relaxed atmosphere, everything goes without code quality checks. Patterns are gathering dust on the shelf.
I still don’t know if I want to continue to work as a programmer in the future and look for a better paying job in a private company, but I already know for sure that I don’t want to do AI. As our American partners say, AI is 99% hype. Fraud. Terry Gow will certainly be able to automate the Foxconn pipeline. Subway agents, cashiers in supermarkets and call center employees will also go to the cold, because this is an algorithm-driven job. A computer, however, will never replace a teacher, doctor, and engineer. And I personally hardly trust the robot to drive my car.
Ah, I forgot: I am a linguist and still useless in the labor market. Where is he, the trend? What do you need to learn to stay afloat? Well, look at the news again. Yeah, Canadians arrested the daughter of the owner of Huawei. The Germans are worried about the vulnerability of government telecommunications systems in the face of the Chinese threat. Nokia has not yet reached the technological level of Huawei, so there is a dilemma in Germany: either wait a few years until local companies give birth to a worthy replacement for Chinese products, and at the same time put an end to an economic leap forward. Or upgrade the local mobile network to the 5G level, relying solely on the potentially unsafe products of the Communists. It seems to me that I should start digging in this direction. C, Linux, networking, electrical engineering, telecommunication standards. This is my next step.
Conclusion All the questions that I began to ask from the moment when I first opened my French tutorial left unanswered. Is it possible to develop language skills or is it an innate human trait? Logic, abstraction, and programming are a similar question. Neurophysiologists say that the left hemisphere of the brain is responsible for the language abilities of a person and his ability to reason logically. Was my brain predisposed to analytic activity or was it the result of life circumstances? Why was I an apathetic child without any interests, and having stepped over the line of twenty years, I suddenly gained assiduity and the ability to assimilate rather sensitive volumes of information?
The question is not idle, because the cashiers of supermarkets after mass layoffs will have to somehow adapt to the new conditions. If logical thinking is a consequence of training, then the cashiers can not worry. Worry will have the current programmers because of increased competition. If logical thinking is encoded by genes, then the government will have to worry, because the cashiers will have to feed something. Well, all sorts of fighters for equality and equal opportunities for all, too, will need to somehow come to terms with this uncomfortable truth.
Well, and at the expense of goals in life. The readers of this article probably had a feeling of bewilderment: healthy, they say, forehead, and still rushing about in apprentices. The realization of what I would like to do came already after my teacher gave me the book “The Man Who Planted Trees” by Giono. After that, I attacked the publications of our scientist Zimov in Nature, which described the first project on geoengineering in Eastern Siberia. There is also a remarkable work of zoologists from Novosibirsk, leading the work on the adaptation of lions to the conditions of the polar winter. I would like to do just that. Over 20 000 rubles per month.
Good luck to all!