Answer the question
In order to leave comments, you need to log in
How to allocate time when learning to program?
Input data: 40 years old, two higher educations - technical (MAI, for a long time) and humanitarian (Lithuanian).
Task: change the field of activity to programming. The intended area is application software. The intended main language is Python.
It is planned, without interruption from the current work, to master the material sufficient to enter the Junior level (yes, "young was not young" ©) in a Russian company in three years (less if possible). I can allocate 3-4 hours a day for self-study. I will learn from books, video courses, online courses, solving problems, developing my own mini-projects, etc.
I think I need to master the following broad topics: I. Algorithms (Wirt N. - Algorithms and data structures; Kormen T., Leyzerson Ch., Rivest R. - Algorithms. Construction and analysis; Sedgwick R. - Fundamental algorithms in C ++, etc.); II. General principles of programming (structural and OO) (Abelson H., Sussman J.J. - Structure and interpretation of computer programs; Weisfeld M. - Object-oriented thinking; McConnell S. - Ideal code; Martin R. - Clean code. Creation, analysis and refactoring, Knut D. - The art of programming (I would not like to), etc.); III. Programming languages (Python: Lutz M. - Learning Python; Lutz M. - Programming in Python, etc.); IV. Databases (PostgreSQL and MySQL: Forta, Hernandez, Molinaro, Gruber); V. Basics of web development(Meyer, Mussiano, etc., something about Django).
Actually, the question is: how would you divide the time (in months) between these five topics if you study them sequentially? Or is it still better to promote them in parallel?
PS Such a long introductory part is written in the expectation that someone may encounter a similar problem and, perhaps, he will be interested in how they tried to solve it before him.
Thank you.
Answer the question
In order to leave comments, you need to log in
My answer will be somewhat rude and not typical, however: "Become a shitcoder!"
I'm not joking - take real problems and solve them as best you can - on a whim, according to crooked advice from Google and stackoverflow, but the main thing is to make complete solutions, get results that work.
First solve any problem yourself - you need to sort - write an algorithm and be glad that it works. And only then - read how to do it, and only after that (if you feel the need!) - read the theory.
All the books that you have written are certainly magical and necessary for a great programmer, but without practice they are dust that will disperse a week after reading. Believe me, I read them all :)
By the way, I would cross out Knut without hesitation - for his reading and understandingyou need a very good mat-basis and experience in programming. If it happens that you will write optimized libraries for data processing in C - then start reading it, it will be very useful, I answer)
Training example:
1. We set the task. An example is to write an application that displays the top 10 questions on the Toaster.
2. We break the task into problems that need to be solved. Example - deploy a working environment, understand how to make a "Hi world", how to work with the network, how to parse HTML
3. We solve problems. Head-on. The task is for speed, everything must be resolved in the shortest possible time. For each problem we use any solution that came to hand. Literally - the first thing is important! That is, it’s really kovnokodim, scoring everything - the beauty of the code, the design, the speed, as long as it works! The motto of this stage - herek, herek and in production! The result of the stage is a working application.
4. We do a superficial analysis. Problem solved? Are there any bugs you don't like anymore? How can they be solved, based on minimal experience? We localize problem areas based on our own views. The result of the stage is the experience of independent code analysis.
5. We do a deep analysis. We try to find the best for each taskone of the solutions available. We read the theory about how to do it in reality. We study and implement patterns, we try to make code that can be transferred to another project. It is important not to change the conditions of the problem, like "but you can also display answers to questions." It is not possible, the task must remain the same. The result of the stage is a good code and identified gaps in knowledge.
6. We rest, reading the theory within the framework of the solved problems and around them. The result is theory backed up by practice.
7. GOTO 1.
First, find someone who WANTS to teach you. Set realistic goals and build your learning into a system. You will not walk this path alone.
The real development is far from the ones you raised. These themes are a good foundation for a developer. But mastering their business is not quick. And without a mentor, there is a 90% chance of going into too much depth - which means losing time and becoming a chatterbox theorist who still cannot write code.
You don't have any extra time. 80% of the programmers are young, 20-28 year old guys and they just don’t want to mess with you.
Therefore, you need to hit only on target.
So, rush for real experience. For a real understanding of how it works. The big theory of computer science is not your friend yet. By the way, how is your English? Most likely almost nothing. Therefore, for the next year and a half, you will master it for fluent reading. 90% of useful information for the developer, in English, Internet and books.
Try now to look for a company that will hire you when you become cool - and it will be very difficult. Age and lack of experience is a significant factor.
Most likely, you need to find a narrow, in-demand specialization and hammer it all this time, not theory !, but skills. Understand what are the simple popular tasks on the freelance exchange, and learn how to do only them with the help of a mentor. Start making money with it. And then it will be clear what's next. To what extent are you capable of doing this?
Take care of your health. Support and develop it. Programming is a very expensive activity, especially when you are over 36.
I am now 38, I myself have been a fan of theory and academic self-education for a developer for several years. Recently I realized that this is a dead end. Programming now is a bunch of real development processes, at many levels, and topics. You can't learn them on your own. I recently found good friends remotely who WANT to help me learn. I began to see them with my eyes, and everything finally began to move. Now I urgently need not the books you listed (although I really partially studied them), but an understanding of web protocols, unix, testing principles, OOP, a bunch of libraries used, spoken English, partially frontend technologies, etc.
So keep it up bro! And yes, we are lucky.
By the way, I practice tai chi. This is support at all levels. Without it, I wouldn't have embarked on such adventures.
--
Update 0:
Decided to take a short cut (particularly after your question) and fund Ruby On Rails courses. Signed up here Thinknetica
One of the goals of the course: to help a person develop to a sufficient level to get a job as a strong junior programmer. The big problem for juniors in the RoR market is getting their first job.
The course already requires a certain level of knowledge of the entire development stack (from Unix to the RoR framework itself).
Of the immediately noticeable advantages of the courses:
- the presence of an active forum of the community of students
- you can see the topics of students from previous enrollments, you can see what questions and nuances there were
- vacancies are posted on the forum
- there are discussions: how best to behave as a junior, useful literature and other tasty chips ... It
turned out to be important that there is a community of like-minded people; those who want to learn Ruby on Rails and get a job. This allows you to better understand yourself - by seeing the work of others. And also setting tasks by the curator allows you to better focus your efforts when studying, which is difficult for self-learning.
The courses will run for three months.
Nobody can answer you for sure. No one knows your circumstances, abilities, desire to learn. No one knows how deeply you will study these topics and how carefully you will work on them. They will be able to give you exact dates only if you follow some well-established curriculum. And even after such programs, people come out with different levels of knowledge and skills. Everything depends on you. Yes, and you do not need to know all these topics in order to start working.
Your main problem (and the problem of other similar people who decide to learn to program) is that for some reason you think that you can learn programming from books. I read books and became a programmer! This is a deceptive path, as programming is pure practice. Theory is needed here only when it is necessary to solve some practical difficulty. To read books on algorithms, OOP and databases, you need some experience, otherwise everything that is written there will pass by and be forgotten.
It also often happens that the tasks you face are not described in the books that you have read or would like to read. Quite often, the solution to a problem is found on the Internet, and not in books. This I mean that you need to start with practice and work out the theory for specific tasks. So you wrote something, you got stuck at some point with the database, you don’t know how to do it right. Search on the Internet or in a book how this problem is solved and solve it. As a result, you get both knowledge and experience, which reinforces this knowledge.
If you know where you want to go to work, find out what tasks are solved there and aim there right away: make a list of such tasks for yourself and try to solve them yourself. And at the same time narrow the theoretical minimum. The ability to solve specific problems is much more important than a mountain of theoretical knowledge.
Modern application and web programming at the grassroots level is a typical routine craft. And as in any craft, the most valuable thing is experience. In his work, the programmer uses a large number of tools - ide, editors, debuggers, assemblers, svn, etc. A programmer needs the skills to read code, unit testing, use current frameworks and APIs, knowledge of protocols, formats for storing and transmitting data, conventions for designing and documenting code.
There is only one way to gain experience and develop skills - writing code. Ideally, participation in open source projects or something of your own. At first there will be a govnokod is the fact. Clean code, in the terminology of Martin R. you mention, comes with experience in projects, in constant comparison and optimization of this or that code, these or those practices.
1) Algorithms + language base
You study/write the implementation of algorithms, thereby mastering the basic syntax of the language.
2) Define 2-3 more extensive tasks for business logic, solve them using the basic tools of your main language (Learn the language at an advanced level)
3) Solve these tasks using a couple of frameworks, compare.
4) Further, in any order (in parallel or sequentially, it doesn’t matter either), study the remaining material that interests you using your own examples. Those. finish, remake, etc.
That's what I would do. Reading something absolutely abstract is pointless. Believe me, I've tried. I also tried it headlong into practice, as they suggest here - it's also pointless. It was this style of learning that helped me.
From experience:
1. Do not try to learn low-demand, but promising languages (Python, Perl, etc.). The ideal choice is PHP or JavaScript. In the first case, the number of potential employers drops significantly. The number of applicants ("young and promising") is not as strong as we would like.
2. Do not "spread your thoughts along the tree." (Decide which skills to hone in the first place: practical - according to the American system, or all at once - according to the Soviet system. More about the American system) I.e. focus on solving practical problems. After obtaining a certain level, it will be possible to move on to the practice of tasks requiring knowledge of the theory of algorithms, etc., etc.
IMHO, I personally studied (after meeting Pascal at the university) in this order: (numbering based on your list): 3 (or its equivalent) - until complete mastery. 4-as needed 3.
4 and 2, IMHO, are redundant, and require special study for "specially advanced"
3. V is desirable to study at advanced levels, having studied 3 and, more or less 4.
Study time (in order of study, IMHO):
1.3-20% (approximately)
2.4- 5-10%
3.5- 5-10%
4. 1- 60%
5..2 (if needed) - about 10%.
PS Of all the books listed in section 2, I especially recommend to study D. Knuth.
I advise a very good book by Prokhorenko "Python. The Essentials". You can download HERE . A simple presentation of the material. An example of working with SQLLite and MySQL, OOP, etc.
The intended area is application software. The intended main language is Python.
Algorithms are good for general development. But at this stage, I would recommend a more practical approach.
Those. learning tools and solving applied problems. I've already answered a similar question here
Python training plan and future prospects. Who will tell?
Gentlemen, please imagine for a moment that you have an abstract problem in front of you - for example, about water flowing in and out of a pool. Why water flows there, where it then flows, what temperature it is - this, of course, is interesting. But let's, together with these arguments, at least try to answer the question clearly posed in the problem.
I am interested in the ratio of time that you consider optimal for studying the five topics under the stated conditions . It can be in percentage.
I recommend: master.cmc.msu.ru/?q=ru/node/16.
At one time, when I studied there, there were students who were well over 40!
Theory is good, but practice is better. You can know a lot of algorithms, but not be able to write a single line of code. I would start with one book in the chosen language and try to write real programs trying to meet the deadlines. In the process of writing, specific questions would arise that would have to be addressed. Over time, patterns accumulate, how to act in a given situation - this is practice. But then you can read all sorts of algorithms, etc.
I would first master the minimal language so that algorithms can be implemented on it. Or even studied in parallel: the algorithm and then the implementation in the chosen language. DB and Web - finally, something completely different may be required or the soul will not lie ...
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question