📜 ⬆️ ⬇️

Does the programmer need to know the algorithms?

Have you met another developer who writes a C-like code with a finite state machine , which introduces weak minds into awe?

And is it so terrible that you don’t know the work of red-black trees in subtleties or confuse linear discriminant analysis with Newton’s second law?

There is a lot of talk about this: at conferences, at Bigdatov's get-togethers, at interviews ... But in practice, when solving specific business problems within tight deadlines, it may turn out that your academic knowledge is in some strange way “not really required” and a hot brain cache for efficient work, it contains only the names of the libraries in boost, java, or unix console commands, the paths to the log files and the non-growing path to the bits in the back room.


')
Yes, I remember the Turing computer, the theory of regular expressions based on finite automata and not only ragel - but in practice you need to know that there is grep, egrep, awk, a little perl and regularizer syntax at the level of popular cases.

Yes, the nodes in the RB tree are very cool, and the priority queue can sometimes even be useful ... but I write a good old culinary SQL query and use indexes.

Of course, it is understandable “as a whole” for what the operating system is needed - but at the moment I am interested in a key that displays the details about the ownership of threads in the ps command.

It is useful to know about searching in depth from graph theory and numerous NP-hard puzzles and tricks for inexperienced people who can scare grandchildren - but much more often you need to understand on your fingers and toes how IP works, what the package consists of and why it slows down this script, who wrote a cunningly smiling developer sipping hot coffee.

Yes, of course, the processor performs hard (not quite, but often in CISC and RISC) commands sealed into it and understands a small, limited, primitive set of commands - but colleagues, without strace, it is often not clear what gives the breath of life to this 10GB RAM crocodile

It turns out that almost all the few scientific advances in computing over the past half century, which can be collected in a small handful - collected, sucked and implemented hundreds of times and in databases, and in distributed file systems, and especially fashionable now NoSQL solutions. And often another problem arises - to know that this has already been done for a long time and is ready and lies there, and not to reinvent the wheel and come up with an algorithm during work hours long since suffered by someone in the disserter.

There is a steady impression that in practice it is much more valuable to have not very complicated, but extensive application knowledge that requires deep immersion — C ++ subtleties, unix system calls, TCP package structure, ps command keys, jvm types of garbage collectors — than to fill the head of science sucked for decades theory of algorithms and calculations. Although of course, expanding horizons in your free time is definitely useful.



Machine learning

With the latest, for the last time in the last decades, the fashion for neurons - deep learning and the search for "gold" in large data arrays, well, yes, it became a little more fun. We began to recall the “forgotten” banal mathematical statistics with logistic regressions, the bearded centenary Bayesian classifier . After the rain, “big data analysis” utilities appeared like mushrooms, which do not represent anything algorithmically complex inside themselves and are written by an average developer for a couple of vacations: Spark, Hadoop / MR, etc.

Language analysis

In this area on a bare reverse index with lotions without machine learning, of course, it is very difficult. But again, this area is quite narrow, and if you are not a linguist and you know Russian at the school level, you will have to sweat a year or two until you understand the basic terminology.

findings

Fanaticism in the acquisition of theoretical knowledge can take a lot of time and effort, but in practice knowledge may not be useful and erode - because almost everything needed by mankind has already been written / rewritten 100 times in standard libraries, databases, file systems and other classics.

Acquisition of practical skills: details of programming languages, unix features, software settings, development environments, SQL, trendy NoSQL capabilities (and again, the forgotten good old algorithms) and unfashionable, but equally powerful SQL tools are much more useful.

No need to worry about shallow knowledge of graph theory - take a ready-made solution , if you're lucky enough to face this task.

We learn to communicate and work in a team. Good mood - the key to success of the project.

No need to suffer over incompetence in machine learning and big data. This is for scientists, mathematicians, analysts, and scientists — you don’t really understand anything if you haven’t solved problems of increased complexity since school. It is more important to understand the business application. And if it turns out that a sophisticated neuron pulls on the solution of the problem of pattern and sound recognition and your online game or web project doesn’t help at all - there is nothing to spend on nerve cells.

Read the manuals on unix to the end. There are many, it is a long time and seriously. When the program is stable and predictable work - pour tea, order a book like this and enjoy the science .

Good luck to everyone, more practical cases and good mood!

Source: https://habr.com/ru/post/279093/


All Articles