Why study algorithms?
Many times, I have asked myself, what is the use of learning algorithms?
As a student at the School of Software, I have learned C language, C, data structures, and algorithms. Among these courses involving programming, I feel that algorithms are the least useful. Of course, , the use of the little finger here is after work. Most of the time during the work process, there is no need to design an algorithm, or apply a very awesome algorithm in the introduction to algorithms. It is more just a way to complete one module and integrate two modules, mainly design patterns and Viewpoints such as object-oriented are playing a huge role, and algorithms must have simple data structures, and may not even require any algorithms at all. I guess this should not be the case in JAVA, which is more of a module building process. Rare.
There are some awesome people around ACM, ranked in the top ten on POJ, but when it comes to work, his algorithm skills do not seem to be of much help to his work. He just writes something in JAVA every day, and then tests and fixes some bugs. It doesn't involve DP, greed, or graph theory at all. As long as the function is realized, it doesn't matter what you use. This kind of thinking should exist. Not everyone can go to a research institution like Microsoft Asia Research Institute, which has high requirements for algorithms. If you go to an ordinary company, as long as you can speak the language, understand some technology, and have done projects, you can basically meet the requirements. As for the interview, you may Asking a few data structure questions will not ask you to write a DP algorithm on the spot, or give you an ACM question to talk about your ideas. The R&D team doesn’t really need algorithms, let alone the testing team.
Then what’s the use of learning algorithms? In fact, this question is very similar to what is the use of learning mathematics. After working, it is rare for anyone to be able to calculate an integral, or find a limit, or even solve a system of quadratic equations of one variable. Chatting with a senior who has been working for a year, he said that data structure, design patterns, operating systems and English are very important. As for algorithms, he didn't mention them at all, and of course he didn't mention calculus.
I think that if we think in terms of mathematics and teach people to think, the same is true for algorithms. Algorithms are essentially mathematics. For example, there are many algorithms in combinatorial mathematics, as well as discrete mathematics. Many times, this knowledge is not used. Even if it is used, it can be read by looking up a book, and then it will be forgotten again soon. To become an average programmer, you don't need to learn many algorithms. Only those who are determined to become excellent programmers should learn some algorithms, which will be beneficial to their own thinking and the improvement of their abilities. Maybe in a group of programmers, everyone can design patterns and be proficient in C/JAVA, but if you are proficient in algorithms, then you will definitely be better at it. Even if you can't use it, it is your weight. You know more than others and can't do it. Not a bad thing.
The above is the detailed content of Why study algorithms?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

To enable PHP containers to support automatic construction, the core lies in configuring the continuous integration (CI) process. 1. Use Dockerfile to define the PHP environment, including basic image, extension installation, dependency management and permission settings; 2. Configure CI/CD tools such as GitLabCI, and define the build, test and deployment stages through the .gitlab-ci.yml file to achieve automatic construction, testing and deployment; 3. Integrate test frameworks such as PHPUnit to ensure that tests are automatically run after code changes; 4. Use automated deployment strategies such as Kubernetes to define deployment configuration through the deployment.yaml file; 5. Optimize Dockerfile and adopt multi-stage construction

This article aims to resolve the common Cannotredeclarearray_column() function redefinition error in PHP development. This error usually occurs when trying to customize the array_column function, which is already built-in in newer versions of PHP. The article will explain in detail how to safely implement the old version of Polyfill solution through conditional judgment function_exists(), as well as best practices to directly remove redundant custom functions in a modern PHP environment to ensure the robustness and maintainability of the code.

Building an independent PHP task container environment can be implemented through Docker. The specific steps are as follows: 1. Install Docker and DockerCompose as the basis; 2. Create an independent directory to store Dockerfile and crontab files; 3. Write Dockerfile to define the PHPCLI environment and install cron and necessary extensions; 4. Write a crontab file to define timing tasks; 5. Write a docker-compose.yml mount script directory and configure environment variables; 6. Start the container and verify the log. Compared with performing timing tasks in web containers, independent containers have the advantages of resource isolation, pure environment, strong stability, and easy expansion. To ensure logging and error capture

Windowsisbetterforbeginnersduetoeaseofuse,seamlesshardwarecompatibility,andsupportformainstreamsoftwarelikeMicrosoftOfficeandAdobeapps.2.LinuxoutperformsWindowsonolderorlow-resourcehardwarewithfasterboottimes,lowersystemrequirements,andlessbloat.3.Li

cronisusedforpreciseschedulingonalways-onsystems,whileanacronensuresperiodictasksrunonsystemsthataren'tcontinuouslypowered,suchaslaptops;1.Usecronforexacttiming(e.g.,3AMdaily)viacrontab-ewithsyntaxMINHOURDOMMONDOWCOMMAND;2.Useanacronfordaily,weekly,o

There are three main ways to install software on Linux: 1. Use a package manager, such as apt, dnf or pacman, and then execute the install command after updating the source, such as sudoaptininstallcurl; 2. For .deb or .rpm files, use dpkg or rpm commands to install, and repair dependencies when needed; 3. Use snap or flatpak to install applications across platforms, such as sudosnapinstall software name, which is suitable for users who are pursuing version updates. It is recommended to use the system's own package manager for better compatibility and performance.

ChoosePop!_OS,Ubuntu,NobaraLinux,orArchLinuxforoptimalgamingperformancewithminimaloverhead.2.InstallofficialNVIDIAproprietarydriversforNVIDIAGPUs,ensureup-to-dateMesaandkernelversionsforAMDandIntelGPUs.3.EnabletheperformanceCPUgovernor,usealow-latenc

Linux is suitable for old hardware, has high security and is customizable, but has weak software compatibility; Windows software is rich and easy to use, but has high resource utilization. 1. In terms of performance, Linux is lightweight and efficient, suitable for old devices; Windows has high hardware requirements. 2. In terms of software, Windows has wider compatibility, especially professional tools and games; Linux needs to use tools to run some software. 3. In terms of security, Linux permission management is stricter and updates are convenient; although Windows is protected, it is still vulnerable to attacks. 4. In terms of difficulty of use, the Linux learning curve is steep; Windows operation is intuitive. Choose according to requirements: choose Linux with performance and security, and choose Windows with compatibility and ease of use.
