A
A
Alexander2013-05-24 18:17:06
Books
Alexander, 2013-05-24 18:17:06

What should a self-taught web programmer learn besides the language itself?

I call to you, habrazhitel.

I have been programming for a long time, in the field of the web (sites). I received education for a long time and had nothing to do with IT or programming. I know several languages ​​(php, python), worked with both small and more or less large projects.

But there comes a moment when you realize that it’s easy to choose a language and learn it. Or read interesting articles on the Internet. It's not up to the end. The basic knowledge that I think is taught in universities in the specialty (mathematical analysis, number theory, algorithms, etc.) is very much lacking. None of this is in my head, of course. I really want to study. But what do I not know to study?

Prompt directions, subjects. What would be useful to study for personal self-development as a specialist in the field of programming. If you also tell me literature, it will be generally super.
I don’t want to consider options for enrolling (points, part-time, telecommuting), listening to lectures. Since I will read and try in practice, I will be faster than attending lectures for several years.
Tried googling to read. But either there is no information or it is very blurry, in terms of what exactly is taught in the specialty and what is worth studying.

To all who responded, thanks in advance.

PS If several options are offered, then please arrange in chronological order of the importance of the study. Well, or what you first need to study in order to understand the following from the list.

UPD: The options "read the textbook for the language you write" are not needed. This is obvious and relevant at the very beginning of the journey. I have already read quite a few of them and have been working as a programmer for several years. I am interested in exactly what is not directly related to my languages, but is related to programming in general.

Answer the question

In order to leave comments, you need to log in

13 answer(s)
[
[email protected]><e, 2013-05-24
@syschel

What's wrong with online courses? There is both theory and practice, and you don’t have to get out of bed.
Speaking objectively, then:
1. Algorithms. Must have for a programmer. Here you can advise the famous book by Kormen and Co. "Algorithms: Construction and Analysis". You can practice on well-known archives like thymus or sites like codeforces .
2. Discrete mathematics. Also an important area. This can be attributed to graph theory, logic, combinatorics, the foundations of probability theory. Strongly intersects with the previous paragraph.
3. As for matan and number theory: I don’t advise you to go deep without need. From matan, differential-integral calculus is enough (with a base in the form of limits, of course). Necessarily linear algebra: matrices, vectors, determinants. This should be studied together with analytic geometry. Unfortunately, I can't recommend any books.
There is also computational mathematics (how to solve problems of mathematical analysis, difurs, algebra on a computer), but it seems to me that the closer computers become to an ordinary person, the deeper they penetrate into our lives, the less important this area becomes.
Well, something about design, OOP and patterns. According to the patterns, the book of the gang of four is considered the bible, according to OOP, the book of Grady Booch “Object-Oriented Analysis and Design” seems to be decent. But I didn't read it.

G
Gleb, 2013-11-24
@business-gl

Slightly off topic, but can be very useful:
1) Check your memory and its detail
The criticality of some details often requires keeping them constantly in the field of attention.
Also, the amount of information in the modern world, in particular on the Internet, is very large, and it can be very useful to process and comprehend each piece, but for a very long time. Therefore, a good memory, coupled with fast reading, will come in handy.
William Atkinson's book "The Science of Self-Improvement and Influencing Others" can be useful here - a little outdated but necessary, as 101 courses you can take its abbreviation from Eksmo Moscow 2012 (same title, but postscript on page 7. "Edited by Dr. Arthur Pella")
2) The ability to concentrate, focus and will
I think it is clear why, but for clarity I will explain. Everyone has heard about Yuri Dolgoruky who could do several things at the same time, but fortunately people usually have such controlled schizophrenia. No matter how many percent of the brain we use, it doesn't matter until the bio, neurosciences learn how to increase this number without consequences. Therefore, we can consider the "endurance" and "strength" of the brain to be finite and slowly replenished -> it is very important how we use them, this gives an understanding that distraction to extraneous things (for example, music during work (not for musicians)) can greatly affect as the end product of thought.
This is where we need:
concentration - for productivity,
will - to cut off what is irrelevant at the moment, but probably valuable to us in general. This is where memory comes in handy in order to restore the idea later
3) Information and its structure
Conceptual understanding is very important, not direct memorization ... memorization
Organization of information is an important skill (imagine that on the Internet there are only personal pages with information without such accumulative sites , like Habr)
Mastery
In general, to become a true Master of your craft, you need to impose restrictions on yourself, not in the sense that if you want to become a programmer, then do not swing on a swing, but limit the scope of work (many probably remember at the beginning of the freelance boom, they grabbed for anything and as a result, they came to little), also in related fields it is not shameful to remain an Apprentice or Apprentice.
It is also worth watching "Athene's theory of EVERYTHING" 2011 for the overall picture, it is worth noting that the Russian translation in some parts is too free and generalized, the replacement of some phraseological units can greatly change the perception of the film as a whole. This film can give a small glimpse of modern scientific thought about how the brain works. I myself watched this film for three days, in parts, for better understanding and comprehension.
PS All this is necessary, a little banal and hackneyed, but in my opinion it is important and useful for any intellectual labor specialist.
PPS While writing about this, I thought maybe I should write in more detail and issue it as an article for Habr? If you would like to read about it, then please ask a couple of questions and wishes in the PM, what would you like to see and what to read.

E
Evgeny Sheleg, 2013-05-24
@Duti_Fruti

Maybe a little off topic and abstract. But sore. I strongly advise you to study its optimization in parallel with any area.
It's just that many do not think about it, they write things that can be much more effective.
They get used to the fact that resources are not limited and you can always scale them.
As for the web (but applicable to any language, and not only)
We studied php - see how to optimize. How to cache, etc.
Studied MySQL - learn query optimization.
We studied JS - find how to apply it more rationally.
Optimize the servers, in general, everything that is possible.
I apologize for being overly emotional. I just got sick and tired of seeing a bunch of brake code.
From websites to apps.

M
Max Kuznetsov, 2013-05-24
@pluseg

It is necessary to study what is required. If you asked this question, then you felt that you are doing something wrong here. Go ahead and google "<programming language> how to do <thing>". But at the same time, do not forget to study more fully, and not be limited to one article and rush into battle. Read about the technology, read a couple more articles. Try to understand what are the disadvantages and disadvantages, how and where this technology is applied. How to optimize it. This is the base. The advantage of this method is that it does not require you to immediately spend a lot of time. In essence, you will do the same thing as now, but in a more complete, more thorough approach to the study. Over time, the same background will accumulate.
And any mathematical analysis most likely will not be useful. Discrete is still possible, but also rare. Agree, 80% of coding is a chore :) If you don't use it in your work, then they won't help you, and when you face a real task, you will probably want to google it yourself.
Let's give an example. There was a task to find the shortest path between two points on the road map. If you google this topic, you will find similar problems already solved, reducing them to graphs and using some algorithm, such as Dijkstra. But don't rush to code right away. Read what algorithms for graphs are, which ones are applicable to your problem, comparing them with Dijkstra's algorithm, etc. After that, you will have the same base. True only in the field of finding the shortest path in weighted graphs. But, by doing the same in all such cases, you will expand your background in general.
If you want the very base, then take a book on the language of interest - this is the best way. Review all system functions (don't memorize, just review to represent language features). A common mistake PHP programmers make is to write their own bikes (especially for array processing), although there are a lot of native functions that work faster.
According to algorithms - read what you use. For example, sorting is needed on the web, rarely something more complicated. Therefore, google sorting algorithms.
Learning what you don't use is useful, but boring and easy to forget.
Read about patterns, although information about them is usually difficult to perceive, except for those that you actually use. For example, active record for working with the database. The latter will be helpful.
To improve the practical skill, I advise you to read someone else's code and watch screencasts of experienced people. Such things are often rich in small-optimizations. And if the author also voices the course of his thoughts when designing the functionality, it’s generally wonderful. (That's what Python courses on udacity, for example, are useful for.)
ps^ Try to know everything about something and something about everything :)
pss^ it's a bit long :(

A
Alexey Akulovich, 2013-05-24
@AterCattus

I would suggest reading different variations on the topic "Algorithms and Data Structures".
And then find interesting tasks/implementations in the PL you know and see how they are implemented.
After that, you can start making bicycles. It is not necessary to bring them to completion (although this should not become practice, here you need to start with small tasks), the main thing is to solve problems that are interesting to you in practice, and then compare, if possible, with other similar solutions.

K
knekrasov, 2013-05-25
@knekrasov

It seems to me that a web programmer should first of all be a programmer. Therefore, I recommend N. Wirth's Algorithms and Data Structures (this is the alphabet and the second course, but very useful).
Be sure to consider tree structures and algorithms on graphs. When I was a schoolboy, Kubensky's book blew my brain (in a good way) .
Read (google) about genetic algorithms.
There is also a cool book on the analysis of programming problems (and non-trivial solutions) - Programming Pearls by J. Bentley
As for the rest, start with what you know about your language (tool, library, framework, etc.). Are you using associative arrays? Do you know how they are arranged? How is key access done? How labor intensive is this task?
Are you using TreeMap? The javadoc for it mentions red-black trees. What is it?
How is the program executed in my language? I need to embed a SQL-like reporting language into my application, how do I do that?
If you are able to clearly talk about the device and principles of your tool, you can predict behavior, evaluate the complexity of one or another approach, then you are no longer self-taught.

R
Riccky, 2015-12-18
@Riccky

The value of mathematics for a programmer is exaggerated.
Of course, if you work in a field where there is a lot of mathematics around (3D graphics, data analysis), then knowledge of mathematics is desirable. But not critical. It is unlikely that you will create libraries yourself, most likely you will use them.
Knowledge is needed precisely in order to navigate this. That is, you do not need to thoroughly know the fast Fourier transform, but it is enough to know that after this transformation, the data is easier to analyze in such and such aspects.
But this is only in narrow areas.
In most areas of programmer work, none of this is required. I would advise only books on the most basic algorithms and programming patterns. This will make a lot more sense. Everything else is all the same. You are unlikely to write it yourself, the implementation of complex algorithms takes a lot of time and it has probably already been done before you and made in high quality. Your business is only to find out which algorithm to call from the library and what it will give.

O
OnYourLips, 2013-05-24
@OnYourLips

I recommend this course: www.edx.org/course/uc-berkeley/cs169-1x/software-service/253 (if registration is closed, you can download elsewhere, but you will only receive lectures, without checking homework and tests)
It covers many areas.
And it doesn't matter that you can program in another language.

K
koriaf, 2013-05-24
@koriaf

Database. Principles of operation and, as the previous speaker pointed out, optimizations.
Books are advised, I have not read it myself (although at least the second one would be worth it):
Martin Fowler, “Corporate Application Templates”;
Steve McConnell, Perfect Code;
Jeff Raskin, Interface: New Directions in Computer System Design.
Advanced-level books on the language used.
In terms of professional growth, it is convenient to work with people who are older, smarter, more experienced than you.
Far from all institutes where programmers are taught provide skills that are useful in the profession. I, a slob student, learned at the institute to pass, and not to do. Give up what works. And in most web tasks, I don’t need fundamental knowledge there at all. Is that the logic to optimize the overgrown expressions in the conditions.

M
Max Kuznetsov, 2013-05-24
@pluseg

This is a comment on the discussion above - I made a mistake with the branch.

> Learning what you don't use is useful but boring and easy to forget.
Depending on how to approach the issue of study. If it’s “I was forced to” or “I won’t need it,” then yes. And if the understanding is that this is my job, my bread, my hobby, and from this I will write better code? :)

1) If it's work, bread and hobby, then it's not "what you don't use". For this case, I wrote above - to approach the study more thoroughly.
2) Judging by your answers, you yourself do not know what you want. This is not arrogance, but simply a fact. Everything related to the web, but not related to “python, layout, databases, highly loaded sites, non-standard logic” are other areas of life. Sounds like you just need a good intellectual hobby other than work. I'm right?

A
afiskon, 2013-05-25
@afiskon

I ranted a lot on this issue. Look, for example, one and two .

G
gleb_kudr, 2013-05-26
@gleb_kudr

In addition to learning algorithms, you can try functional programming. It's normal to break the brain. Moreover, it is revealed most strongly in algorithmic tasks.

S
StrangeAttractor, 2013-05-26
@StrangeAttractor

Not an answer, but a comment in support: in my world, books like “theoretical computer science (computer science) and professional programming (conservative and agile methodologies, organization of the collaborative development process, version control, unit testing, etc.) are very lacking. for self- taught teapots . I, too, have been at the computer for 20 years, but all by myself. As a result, one way or another, I know a number of languages, patterns, “search the topic” in practice (but only alone), but I can’t solve a single elementary problem for algorithms (at best, I’ll invent something of my own) and I can’t imagine how it’s possible work on a program if it doesn’t fit all in your head (although I’m fine with architecture and patterns).

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question