Why Degree Holder in Programming Is Better Than Being a Self-Taught

为什么拥有编程学位比自学更好

If we consider an individual alone, the fact that he has a diploma or that he was self-taught tells you nothing about his abilities. A self-taught person could very well be significantly better than another graduate. And the opposite is just as true. In short, there are no rules regarding a degree taken alone.
如果我们单独考虑一个人,他拥有文凭或自学的事实并不能告诉你他的能力。自学成才的人很可能比其他毕业生要好得多。反之亦然。简而言之,对于单独取得学位没有任何规定。

The problem for the self-taught who does not yet have experience is that it is impossible to say to what extent he has taken the time to deepen his subject.
对于还没有经验的自学成才者来说,问题是无法说他花了多少时间来深化自己的学科。

This can go to the self-proclaimed self-taught who created an HTML page in his corner one day (complete neophyte) or to the self-taught who masters several programming languages ​​and very advanced concepts of software engineering, having already collaborated on several projects (almost pro).
这可以是那些自称自学成才的人,有一天在他的角落里创建了一个 HTML 页面(完全的新手),或者是那些自学成才的人,他们掌握了多种编程语言和非常先进的软件工程概念,并且已经与其他人合作过几个项目(几乎是专业版)。

The diploma is supposed to guarantee, in theory, at least, a minimum level. So, overall, if we contrast the mass of graduates with the mass of self-taught people, it seems safer to bet on a graduate due to this skills threshold effect enabled by the diploma. But once again, this reasoning only applies at the scale of a population and says nothing about a specific individual.
从理论上讲,文凭至少应该保证最低水平。因此,总的来说,如果我们将毕业生的数量与自学成才的数量进行比较,由于文凭带来的技能门槛效应,押注于毕业生似乎更安全。但同样,这种推理仅适用于人口规模,并没有涉及特定的个人。

In detail, here is an overview of the skills that could be acquired in computer science degree courses but which would escape many self-taught people:
详细来说,这里概述了可以通过计算机科学学位课程获得但许多自学成才的人无法掌握的技能:

Knowledge of a low-level programming language (generally C/C++ or even assembler) and mastery of the concepts that allow a program to run correctly: compilation/interpretation, memory management, concurrent access, thread scheduling, management of IO, interruptions, lots of things that are not always exciting (or even frankly boring) but knowledge of which allows mastery of programming.
了解低级编程语言(通常是 C/C++ 甚至汇编语言)并掌握使程序正确运行的概念:编译/解释、内存管理、并发访问、线程调度、IO 管理、中断、批量这些事情并不总是令人兴奋(甚至坦白说很无聊),但了解这些知识可以让您掌握编程。
Knowledge of other languages and, above all, of different programming paradigms will subsequently allow you to make an informed choice when it comes to embarking on a project and guaranteeing its maintainability.
了解其他语言,尤其是了解不同的编程范例,将使您在开始项目并保证其可维护性时做出明智的选择。
Ability to collaborate and notions of software engineering. The training courses are generally punctuated by student team projects, which allow them to become familiar with software development issues in real (collaborative) conditions.
协作能力和软件工程概念。培训课程通常会穿插学生团队项目,这使他们能够熟悉真实(协作)条件下的软件开发问题。
Theoretical knowledge of standard algorithms and data structures. In particular, introduction and awareness of the notion of algorithmic complexity. Even more advanced notions such as decidability, combinatorics, problem reduction, etc.
标准算法和数据结构的理论知识。特别是对算法复杂性概念的介绍和认识。甚至更高级的概念,如可判定性、组合学、问题简化等。
Theoretical knowledge in various disciplinary fields, which may be helpful in certain projects: mathematical foundation (in particular linear algebra), graph theory, language theory, artificial intelligence, signal processing, etc. There are lots of fascinating subjects that will certainly be useless to you if you limit yourself to Web programming but which will quickly become essential for industrial and technological projects.
各个学科领域的理论知识,对某些项目可能会有帮助:数学基础(特别是线性代数)、图论、语言理论、人工智能、信号处理等。有很多令人着迷的学科,对某些项目来说肯定是无用的如果您将自己限制在 Web 编程方面,那么这将很快成为工业和技术项目的必需品。
Technical knowledge of English may seem stupid, but it quickly becomes blocking without it. Most self-taught people also master this aspect because many resources are available in Shakespeare’s language.
英语的技术知识可能看起来很愚蠢,但如果没有它,它很快就会变得阻塞。大多数自学成才的人也掌握了这方面,因为莎士比亚的语言中有很多资源。
Remember that these are only generalities, most likely false on a case-by-case basis. You will always find a self-taught person who ticks all the boxes or a graduate who doesn’t tick some of them.
请记住,这些只是一般性的,根据具体情况很可能是错误的。你总会发现一个自学成才的人满足所有要求,或者一个毕业生不满足其中一些要求。

But overall, it is generally fairer to consider that a graduate has more strings to his bow.
但总的来说,认为毕业生有更多的条件通常是更公平的。

Typically, I have noticed that C++ suffers from certain unpopularity, so self-taught people turn more quickly to Python or Javascript, ignoring basic programming notions.
通常,我注意到 C++ 不太受欢迎,因此自学成才的人会更快地转向 Python 或 Javascript,而忽略基本的编程概念。

These are concepts that they will never have to deal with if they limit themselves to the language they have learned, so it is generally not bothersome. But that quickly limits the scope of action.
如果他们将自己局限于所学的语言,那么他们永远不必处理这些概念,因此通常并不麻烦。但这很快就限制了行动范围。

For example, explaining the need for a multithreaded or memory-controlling program to someone who only knows Javascript quickly becomes complicated. A graduate knows these concepts as well as some of the languages ​​that allow their implementation.
例如,向只了解 JavaScript 的人解释对多线程或内存控制程序的需求很快就会变得复杂。毕业生了解这些概念以及一些允许其实现的语言。

Likewise, it seems that many self-taught people enter programming by learning a language. This leaves aside the entire theoretical aspect, particularly the management of algorithmic complexity. And it can be damaged once it is on the ground.
同样,似乎许多自学成才的人通过学习一门语言进入编程领域。这就忽略了整个理论方面,特别是算法复杂性的管理。一旦落在地面上,它就可能被损坏。

Even if he had a perfect command of a good number of languages, you could only expect a self-taught person to implement an efficient combinatorial optimization engine if he had some knowledge of graph theory.
即使他完美掌握了多种语言,但如果一个自学成才的人具有一定的图论知识,你也只能指望他能够实现高效的组合优化引擎。

Ultimately, it all depends on how you want to use programming and the level you were able to reach by training yourself. But you have to tell yourself that you will be faced with people who have spent 2 to 5 (or even 8) years of full-time training. And it’s always impressive to see self-taught people who manage to easily compare. I take my hat off to them.
最终,这完全取决于您想要如何使用编程以及您通过自我培训能够达到的水平。但你要告诉自己,你将面对的是经过2到5年(甚至8)年全日制培训的人。看到自学成才的人能够轻松进行比较总是令人印象深刻。我向他们脱帽致敬。