Does the programmer need to know the algorithms?

    Have you ever met a developer who, instead of the standard scripting language function of dividing a string by regularity, writes C-like code with a state machine that introduces fragile minds into awe?

    And is it so terrible that you do not know the intricacies of red-black trees in the intricacies, or confuse linear discriminant analysis with Newton’s second law?

    There is a lot of talk about this: at conferences, at big parties, at interviews ... But in practice, when solving specific business problems in tight deadlines, it may turn out that your academic knowledge is somehow strange “not really required” and a hot brain cache for effective work, it contains only the names of libraries in boost, java, or unix console commands, paths to log files and an unincreted path to a bit in the back room.

    Yes, I remember the Turing computer, the finite-state machine theory of regular expressions and not only ragel - but in practice you need to know that there is grep, egrep, awk, a bit of perl and regular syntax at the level of popular cases.

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

    Of course, it’s understandable “in general” why the operating system is needed - but at the moment I’m interested in a key that displays details about the threads in the ps command .

    Good to know about in-depth searches from graph theory and numerous NP-hardtasks and tricks for inexperienced people who can scare grandchildren - but more often it is necessary to understand on the fingers and toes how IP works, what the package consists of and why this script is slowed down by a cunningly smiling developer drinking hot coffee.

    Yes, of course, the processor executes the commands that are hardwired (not quite, but often in CISC and RISC) and understand a small, limited, primitive set of instructions - but, colleagues, it’s often not clear without strace , which gives life breath to this 10GB RAM consuming to the crocodile.

    It turns out that almost all the few scientific achievements in the field of computing over the past half century, which can be collected in a small handful, are collected, sucked and implemented hundreds of times in databases, in distributed file systems, and especially NoSQL solutions that are now fashionable. And quite often another problem arises - to know that it has already been done and ready for a long time and lies there, and not to reinvent the wheel and come up with an algorithm for working long ago by someone in the dissertation.

    There is a lasting impression that in practice it is much more valuable to have not very complex, but deeply immersive, extensive applied knowledge - C ++ subtleties, unix system calls, TCP package structure, ps command keys, jvm garbage collector types - than stuffing your head with suckers for decades in the scientific community theory of algorithms and computing. Although of course, broadening your horizons in your free time is certainly a useful thing.

    Machine Learning

    With another, for the last time in decades, fashion for neurons - deep learning and the search for "gold" in large datasets, well, yes, it has become a bit more fun. They began to recall the “forgotten” banal mathematical statistics with logistic regressions, the bearded centennial Bayesian classifier. Utilities of "big data analysis" appeared like mushrooms after rain, which do not represent anything algorithmically complex inside themselves and are written by average developers 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, is very difficult. But again - this is a rather narrow area, and if you are not a linguist and know Russian at the school level - you will have to sweat a lot for a year or two until you begin to understand the basic terminology.


    Fanaticism in acquiring theoretical knowledge can take a lot of time and effort, but in practice, knowledge may not be useful and weathered - because almost everything humanity needs 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 environment, SQL, fashionable NoSQL features (and these are again the forgotten old kind algorithms) and unfashionable, but no less powerful SQL tools - much more useful.

    No need to worry about a shallow knowledge of graph theory - take a ready-made solution if you are lucky enough to run into this problem.

    Learning to communicate and work in a team. A good mood is the key to the success of the project.

    No need to suffer about machine learning and big data incompetence. This is for scientists, mathematicians, analysts and scientists - you still don’t understand anything much if you didn’t solve problems of increased complexity from school. It’s more important to understand the business application. And if it turns out that the sophisticated neuron is drawn to the solution of the problem of recognizing images and sounds, your online game or web project will not help in any way - there is nothing to waste nerve cells.

    Read unix manuals to the end. There are a lot of them, this is a long time and serious. When the program will work stably and predictably, pour some tea, order a book like this, and enjoy the science .

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

    Also popular now: