学习编程有多难( 一)
2022-02-14 汤沐之邑 9879
正文翻译

How hard is it to learn programming?

学习编程有多难( 一)

评论翻译
Rahul Dey, lived in Kolkata, West Bengal, India

Rahul Dey,住在印度西孟加拉邦的加尔各答

No, and yes.
First the No:
Languages are easy to learn.
Hello, world programs are easy to write.
You can pick up programming with just a mediocre laptop and the internet. There is no need for specialized tuitions or classes.
Then the yes:

说不难也难;
先说不难:
语言很容易学。
你好,世界程序很容易编写。
你可以用一台普通的笔记本电脑通过互联网来学习编程,不需要专门的学费或课程。
再说难:

Learning basics of a language are easy. Learning a language in depth is hard. It takes a seasoned programmer 3–4 days to learn a language and start to be productive using it at some level. It will take months for the same programmer to master that language.
Programming is more than just the language. There are programming paradigms like OOPs, procedural and functional among others. Each has its own way of thinking while writing code.
Programming requires knowledge of deeper OS concepts like threading, critical section problems, deadlocks, virtual memory, paging, segmentation, page faults etc. Each topic listed here in itself is pretty heavy.
Programming requires programmers to know and utilize efficient data structures and algorithms. You will not find a programmer using an array to store stuff where continuous sorting of the obxts stored is required. There are tons of algorithms to go through and an equal number of data structures. Some basic DS a programmer should know are arrays, lists, BST, heap, tries, graphs, hash tables. The really good one know much more.
Good programmers know design patterns and solid principles. They just not only know what these things mean, they actually realize their importance.
Then there are even more fundamental concepts that not all programmer are required to know. Kernel level programming, OSI layer protocols in depth, details of the hardware being programmed on, advanced mathematics.
So at the end of the day, it depends really. Do you want to learn to programme as a hobby or do you want to make it a profession? It will take year and years of dedication to become good.

学习一门语言的基础知识很容易,深入学习就很难。经验丰富的程序员需要3-4天的时间来了解一门语言,并开始在一定程度上高效地使用它,同一个程序员需要几个月才能掌握这种语言。
编程不仅仅是语言。有一些编程范例,比如面向对象编程(OOPs)、过程式编程和函数式编程等等。在编写代码时,每个人都有自己的思维方式。
编程需要了解更深层次的操作系统概念,如线程、临界区问题、死锁、虚拟内存、分页、分段、页面错误等等。这里列出的每个主题本身都相当复杂。
编程要求程序员了解并利用高效的数据结构和算法。在需要对存储的对象进行连续排序的情况下,你发现程序员不会使用数组来存储内容。有大量的算法需要处理,同样数量的数据结构也需要处理。程序员应该知道的一些基本数据是数组、列表、BST、堆、尝试、图形和杂凑表。真正优秀的人知道的更多。
优秀的程序员知道设计模式和可靠的原则。他们不仅知道这些东西意味着什么,他们实际上意识到了它们的重要性。
还有一些更基本的概念,并非所有程序员都需要知道。内核级编程,开放式系统互联参考模型(OSI)层协议,正在编程的硬件细节,高等数学。
所以说到底,这要看情况而定。你是想把编程作为一种爱好,还是想把它变成一种职业?这需要一年又一年的努力才能变得好。

Tom Borkowski, former Software Engineer & Manager at Various (1963-2016)

Tom Borkowski,前软件工程师和经理(1963-2016)

Programming is not innately hard nor hard to learn. However, our software development industry has made it needlessly hard over the last 40 years to my continuing horror. We should go back to easy because coding a software design should be easy, not needlessly difficult. Most smart high school graduates should be able to learn to code with a few months of training.
In the year 2021, we should be mostly programming with graphical tools, not with languages. For example, we use graphic tools to create user interfaces. Such graphic tools together with AI could be used in virtually all aspects of coding.
Have you recently used Microsoft’s C#.NET on Visual Studio 2019. Holy crap, it’s horribly and needlessly complicated. There are dozens of components to optionally download and configure. Way too complicated. I want to concentrate on designing software, not figuring out Microsoft’s horrible complex ways of coding software.
The next issue is that only about 10% of software requires 6 years of computer science college. For example, you can’t write an autopilot for the next Boeing 7x7 without at least 6 years of college. I know because I wrote autopilots for aircraft and spacecraft. Such jobs generally require a PhD.

编程并不是天然地难学,本身也不难学。然而,在过去的40年里,我们的软件开发行业让我继续感到恐惧。我们应该回归简单,因为编写软件设计应该很容易,而不是不必要的困难。大多数聪明的高中毕业生通过几个月的培训应该能够学会编码。
在2021年,我们应该主要是用图形工具编程,而不是用语言编程。例如,我们使用图形工具创建用户界面。这种图形工具与人工智能一起,几乎可以用于编码的所有方面。
你最近使用过微软的C语音吗。NET在Visual Studio 2019上发布。天哪,这太复杂了。有几十个组件可以选择下载和配置,太复杂了。我想专注于软件设计,而不是搞清楚微软可怕的复杂软件编码方式。
下一个问题是,只有大约10%的软件需要6年的计算机科学学院经历。例如,如果没有至少6年的大学经历,你就无法为下一架波音7x7自动驾驶仪编写程序,我知道是因为我为飞机和宇宙飞船写了自动驾驶仪程序,这类工作通常需要博士学位。

However, most websites, banking software, and 90% of most commercial software do not need the 6 years of college training currently required. The logic of most computer programs is straightforward and easily understood without much training.
I would like to remind everyone that for decades in the United States, most commercial software was written by smart high school graduates with about 12 weeks of COBOL training.
Did software become harder per se? NO. NO. NO. If anything, it should have become easier to code software. But it hasn’t. Software has become needlessly hard to code. And there are 720 officially recognized programming languages.

然而,大多数网站、银行软件和90%的大多数商业软件不需要目前要求的6年大学经历。大多数计算机程序的逻辑简单易懂,无需太多培训。
我想提醒大家,几十年来,在美国,大多数商业软件都是由聪明的高中毕业生编写的,他们接受了大约12周的面向商业的通用语言(COBOL)培训而已。
软件本身变得更难了吗?不,不,不。如果有什么区别的话,编写软件应该会变得更容易。但事实并非如此,软件已经变得毫无必要地难以编写代码,有720种官方认可的编程语言。

COMPUTER SCIENTIST PROFESSORS MADE PROGRAMMING NEEDLESSLY HARD
I watched computer scientists come into existence and then develop language theory including composition, polymorphism, abstractionism, encapsulation, aggregate relationships, overloading, association, templates, interfaces, containers, the single responsibility principle, the principle of clarity, the open closed principle, and the intricacies of creating hierarchies of obxts.
I fully understand what all that esoteric stuff means, but learning it has no value for practicing software engineers. I strongly recommend software engineers ignore all that OOP theory and only concentrate on the mechanics of obxts.
obxts are an extremely useful software language mechanism. obxts allow programmers to create any type of data structure that can be treated as a complex variable that is native to the language. obxts can use the language’s symbolic operators such as + - * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ < > and so forth. obxts allow programmers to organize all software as obxts that replace modules and API’s. obxts allow software engineers to write in different languages and integrate their obxts into a final product.

计算机科学家教授让编程变得不必要的困难
我目睹了计算机科学家的诞生,然后发展了语言理论,包括组合、多态性、抽象主义、封装、聚合关系、重载、关联、模板、接口、容器、单一责任原则、清晰原则、开闭原则,以及创建对象层次结构的复杂性。
我完全理解这些深奥的东西意味着什么,但学习它对实践软件工程师没有任何价值。我强烈建议软件工程师忽略所有面向对象的程序设计(OOP)理论,只关注对象的力学。
对象是一种非常有用的软件语言机制。对象允许程序员创建任何类型的数据结构,这些数据结构可以被视为该语言固有的复杂变量。对象可以使用语言的符号运算符,例如+-*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\<>等等。对象允许程序员将所有软件组织为替代模块和应用程序接口(API)的对象。对象允许软件工程师用不同的语言编写,并将其对象集成到最终产品中。

原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处


When obxts were added to functions, programmers had everything they need in a programming language. There was no need for new general-purpose languages. Programmers only need libraries of obxts that do everything a programmer needs to write a program. Instead, we created 720 recognized programming languages which only makes programming hard. It would be better if our software industry had developed more libraries of obxts for programmers to use instead of more languages.
obxts should have made software development easier, not harder.
It is my belief that 90% of all commercial software could be written by smart high school graduates with a few months of programmer training. A 2-year community college program should be producing the bulk of programmers for the United States. But it isn’t.

当对象被添加到函数中时,程序员就拥有了编程语言中所需的一切。不需要新的通用语言。程序员只需要做程序员编写程序所需的一切的对象库。相反,我们创造了720种公认的编程语言,这只会让编程变得困难。如果我们的软件行业为程序员开发更多的对象库,而不是开发更多的语言,那就更好了。
对象应该让软件开发更容易,而不是更难。
我相信90%的商业软件都可以由经过几个月程序员培训的聪明高中毕业生编写。一个为期两年的社区大学项目应该为美国培养出大量的程序员,但事实并非如此。

WHY IS 6 YEARS OF COMPUTER SCIENCE COLLEGE GENERALLY REQUIRED TO GET A PROGRAMMING JOB TODAY?
The answer is because computer scientists and our software development industry has made software coding needlessly hard. The tools, theory, and frxworks have become excruciatingly complex and filled with idiosyncrasies. For example, I have 9 years of engineering college and 57 years of writing programs, and I don’t know ? of all the terminology used in Visual Studio 2019 which is just made-up words by a bunch of junior programmers with 6 years of computer science college who think it is cool to make hyper-complex development software. No, it isn’t. Making it easy to code is cool.
System software engineers don’t realize their job is to make development tools and frxworks that are easy to understand and use. I don’t want to be spending my time learning their needlessly hyper-complex development systems and frxworks. I want to be developing software which includes the clever use of multitasking, data structures, heuristics, and development of optimized algorithms.
Let me give you another example. I have a programmer friend who got a task to write a program that would have normally taken my genius friend one day to complete and fully test. Except, he was required to use Amazon’s AWS frxwork to do the task. It took him weeks and weeks and weeks of learning AWS to complete his one day job.

为什么现在一般要求6年的计算机科学学院经历才能获得一份编程工作?
答案是因为计算机科学家和我们的软件开发行业已经让软件编码变得不必要的困难。这些工具、理论和框架变得极其复杂,充满了特质。例如,我有9年的工程学院经历和57年的写作课程,我会不知道在VisualStudio2019中使用的所有术语是一群计算机科学学院六年的初级程序员编造的,他们认为制作超复杂的开发软件很酷。不,它不是。让编码变得容易才是很酷的。
系统软件工程师没有意识到他们的工作是制作易于理解和使用的开发工具和框架。我不想花时间学习他们不必要的超复杂开发系统和框架。我想开发软件,包括多任务处理、数据结构、启发式和优化算法的开发。
我再举一个例子。我有一个程序员朋友,他接到了一个任务,要写一个程序,通常需要我的天才朋友一天才能完成并完全测试。除此之外,他被要求使用亚马逊的亚马逊网络服务框架来完成这项任务。他花了好几周的时间学习AWS,才完成了原本一天就可以完成的工作。

MOST SOFTWARE SHOULDN'T BE HARD TO DEVELOP
There is nothing inherently hard about most software development.
A smart high school graduate need only learn data structures, a little about algorithm development, the services that operating systems provide (including multitasking) and then he or she would need to learn an obxt-oriented programming language such as C#. Armed with that knowledge, I estimate that about 90% of current software could then be developed.
Programmers write programs using only 6 statements:
#1 Programmers declare variables and data structures.
All obxt-oriented languages allow a programmer to design, declare, and use any type of data structure that can be used as a variable native to the language, a whole complex variable using symbols such as + < > - \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ *.
#2 Programmers use the assignment statement to move values between data inputs, variables, and data structures.
#3 Programmers do computations using expressions.
#4 Programmers control the flow of execution with if, while, and so forth.
#5 Programmers package routines into functions including input parameters and an output.
#6 Programmers package data structures and functions into obxts which replaced modules and API’s. Programmers then instantiate obxts as they need them in a running program.

大多数软件都不难开发
大多数软件开发本身并没有什么困难。
聪明的高中毕业生只需要学习数据结构、一点算法开发、操作系统提供的服务(包括多任务),然后他或她就需要学习面向对象的编程语言,比如C语音。有了这些知识,我估计目前大约90%的软件可以开发出来。
程序员只使用6条语句编写程序:
程序员声明变量和数据结构。
所有面向对象的语言都允许程序员设计、声明和使用任何类型的数据结构,这些数据结构可以用作该语言固有的变量,一个使用+<>-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*等符号的复杂变量。
程序员使用赋值语句在数据输入、变量和数据结构之间移动值。
程序员使用表达式进行计算。
程序员通过if、while等控制执行流程。
程序员将例程打包成函数,包括输入参数和输出。
程序员将数据结构和函数打包成对象,替换模块和应用程序接口。然后,程序员在运行程序中根据需要实例化对象。

It wouldn’t take long to learn those 6 things if professors didn't make programming languages needlessly hard. Programming languages are easy to learn.
2 years in a community college is all that is needed to acquire all the knowledge and skills a programmer needs to create the bulk of commercial software and websites. Only about 10% of current software requires 6 years of college.
Most software should be developed by smart high school graduates with an Associate Degree in Programming from their local community college. But that can’t happen today because the tools and frxworks and theories have become needlessly complicated.

如果教授们不让编程语言变得不必要的难,那么学习这六件事就不会花太长时间,编程语言很容易学。
2年的社区大学生活是一个程序员获得创建大量商业软件和网站所需的所有知识和技能的全部条件。目前只有大约10%的软件需要6年的大学教育。
大多数软件都应该由聪明的高中毕业生开发,他们拥有当地社区学院的编程副学士学位。但这不可能在今天发生,因为工具、框架和理论已经变得不必要的复杂。

OUR SOFWARE INDUSTRY MADE DEVELOPMENT HARD
Computer scientists, tool makers, and our software development industry have made software development needlessly complicated.
Microsoft continues to build needlessly hyper-complex software development tools. I guess making programming hard is necessary to build a software empire. You can’t provide tools to allow people to compete against you because you’d go out of business.
C#.NET was the biggest con-game of the 21th century, and I bought into it. It promised ease of software development, but after we got sucked into it, it took us down the path to oblivion while Microsoft used C++ Win32 for its own software development. They called it “Managed Software.” Yea, they managed to keep us unproductive for 20 years while Microsoft provided the software.
My final thought is that companies such as Microsoft, Amazon, and Apple apparently make more money by letting software development become needlessly hard. It is a fact that there is no industry effort to make our tools and frxworks easy to understand and use. In fact, they become harder with every new release.

我们的软件产业发展困难
计算机科学家、工具制造商和我们的软件开发行业使软件开发变得不必要的复杂。
微软继续开发不必要的超复杂软件开发工具。我想努力编程是建立软件帝国的必要条件。你不能提供工具让人们与你竞争,因为你会破产。
C语音NET是21世纪最大的骗局,我也参与其中。它承诺了软件开发的简易性,但在我们被它吸引之后,它把我们带到了遗忘的道路上,而微软则用C++ Win32来进行自己的软件开发。他们称之为“管理软件”是的,当微软提供软件的时候,他们设法让我们保持了20年的低效。
我最后的想法是,微软、亚马逊和苹果等公司显然通过让软件开发变得不必要的困难来赚更多的钱。事实上,业界并未努力使我们的工具和框架易于理解和使用。事实上,每发布一个新版本,它们都会变得更加困难。

FINAL ANSWER TO YOUR QUESTION
The answer to your question is that 90% of current software should NOT be hard to develop. It should be easy for smart people to learn and then develop 90% of commercial software. However, over the last 40 years, our software development industry has made programming needlessly very hard in virtually everyway. And that’s a fact. Programming is currently very hard.

你问题的最终答案
你的问题的答案是,目前90%的软件应该不难开发。聪明人应该很容易学习,然后开发出90%的商业软件。然而,在过去的40年里,我们的软件开发行业几乎在所有方面都让编程变得非常困难。这是事实,只能说目前编程非常困难。

Terry O'Donovan, lives in Pittsburgh, PA

特里·奥多诺万(Terry O'Donovan),居住在宾夕法尼亚州匹兹堡

Learning to code (e.g., learning how to use a programming language) is not difficult.
Seriously, it really isn’t. You can learn the syntax of a programming language in a day or so, and within a week you can be writing your own simple programs, if you have any innate interest in doing so.
However, what’s very difficult is using code to solve real world problems. Whether that’s analyzing data, creating a fully featured web application, or making a professional grade video game, using a programming language to create a finished, polished, bug-free product is extraordinarily difficult.
Learning algorithmic analysis and design is difficult. Learning software architecture and design patterns is difficult (and time-consuming, as they are constantly changing). Learning the tooling around your chosen language is difficult.
Most importantly, learning to have the perseverance to stick with it when the problems get tough is very difficult.
I think it’s actually really important to keep this in mind. A lot of people hear, “Programming is hard!” and then get a strong boost of confidence when their initial efforts go more smoothly than anticipated. “Wow, this isn’t that hard at all!” Then disaster strikes when things get tough. Maybe they begin to feel that they’re not cut out for programming after all — when really, this “regression” in the learning curve is perfectly natural!

学习编码(例如,学习如何使用编程语言)并不困难。
说真的,不难。你可以在一天左右的时间里学会一种编程语言的语法,如果你天生有兴趣,你可以在一周内编写简单程序。
然而,非常困难的是使用代码来解决现实世界中的问题。无论是分析数据、创建一个功能齐全的网页应用程序,还是制作一个专业级的视频游戏,使用一种编程语言来创建一个成品—精良、无缺陷的产品都是非常困难的。
学习算法分析和设计是困难的。学习软件体系结构和设计模式很困难(而且很耗时,因为它们不断变化)。围绕所选语言学习工具是很困难的。
最重要的是,当问题变得棘手时,学会坚持不懈地坚持下去是非常困难的。
我认为记住这一点非常重要。很多人听到“编程很难!”然后,当他们最初的努力比预期顺利时,他们的信心就会大大增强。“哇,这一点都不难!”当事情变得艰难时,灾难就会降临。也许他们开始觉得自己不适合编程,实际上,学习曲线中的这种“回归”是完全自然的!

Kamal Preetam Chittuluri, studied at Gayatri Vidya Parishad College Of Engineering (2021)

Kamal Preetam Chittuluri,在Gayatri Vidya Parishad工程学院学习(2021年)

Indian education system makes us believe so…
These factors make indian students lack in the field of programming.

印度教育体系让我们相信这些因素使得印度学生缺乏编程领域的知识。

At school
Most of the schools in India don't teach how to code during schooling.
Forget programming they don't even take computer subject seriously.
Even if there is programming in the syllabus they don't make the students realize the value of programming and students at this age aren't that mature to understand.
X: why don't you teach your son to code? I heard it is useful in future!
Parent: Nah! I will join my son in IIT coaching classes, he is too young to code.
Most of the parents join their children in IIT coaching institutes without realizing if their child is interested or not.
These coaching institutes opt Hindi or Sanskrit as additional subject leaving coding so that the student could focus on IIT.
If a student want to learn to code during his/her +1,+2 they don't have time for that because they will be busy preparing for the weekend mains and advance exam.
If at all a student tries to use internet to code. This is the conversation between student and indian parent …… (-_-)
(Student learning from laptop)
Dad enters the room..
Dad: what are you doing?
Student: learning C online , dad!
Dad: *angry tone* why are you wasting your time! Go and prepare for your physics textbook and solve some MCQ's !
If a student tries to learn programming in college then believe me his classmates are going to make the highest fun of him.

在学校
印度的大多数学校在上学期间都不教如何编码。
忘了编程吧,他们甚至都不把计算机课当回事。
即使教学大纲中有编程,也不能让学生意识到编程的价值,而且这个年龄段的学生还不够成熟,无法理解编程。
X:你为什么不教你儿子编程?我听说它在将来很有用!
家长:不!我将和我儿子一起参加印度理工学院辅导班,他还太小,不会写代码。
大多数家长在不知道孩子是否感兴趣的情况下加入了印度理工学院辅导机构。
这些辅导机构选择印地语或梵语作为附加科目,让学生专注于印度理工学院。
如果一个学生想在他/她+1、+2期间学习编码,他们没有时间,因为他们将忙于准备周末和预考。
如果一个学生试图使用互联网进行编码,这是学生和印度家长之间的对话:
学生通过笔记本电脑学习
爸爸走进房间。
爸爸:你在干什么?
学生:爸爸,在线学习C!
爸爸:(愤怒的语气)你为什么浪费时间!去准备你的物理课本,解决一些多选题问题!
如果一个学生试图在大学里学习编程,那么相信我,他的同学们会把他逗乐的。

During engineering
(The one who took maths,physics and chemistry as his core from childhood is going to join in top IIT's CSE department and the worthy one's who loved to code, cry staring the computer screen for not qualifying JEE or the one who are qualified take up petroleum or chemical due to parental and relatives pressure.)
Many of the engineering colleges don't have even coding in first semester(even CSE department). Students from these colleges get scared seeing their friends from other colleges writing c codes and solving python problems and get depressed.
There is another problem with engineering students, that is we compare our selves with our classmates which is a huge mistake.
Frankly speaking, some lectures in engineering colleges don't teach basics properly and make students believe coding is difficult.
X: why don't you teach your son to code? I heard it is useful in future!
Parent: I saw my son's college syllabus and they teach all programming languages. So I will join him in GATE coaching centers.
Most students don't know real world programming is different from what they have learned in college.
Remember, College only teaches you basics. It is you(student) have to excel in this field. It isn't the mistake of you parent not to teach you code because they think according to their generation. You have to teach them how important coding is! And Some parents understand the situation and join their children in tutorial centers before hand. And I really appreciate their decision and thank them by heart.
Coding has no age limit! Anyone can code!

工程期间
那些从小就以数学、物理和化学为核心的人将加入印度理工学院的最佳系—通信安全机构(CSE)系,而那些有价值的人则因为没有通过JEE考试而喜欢编码、盯着电脑屏幕哭泣,或者那些通过考试的人由于父母和亲戚的压力而学习石油或化学专业。
许多工程学院在第一学期甚至没有编码(甚至连CSE系也没有)。这些大学的学生看到来自其他大学的朋友编写c代码和解决python问题时会感到害怕,并感到沮丧。
工科学生还有一个问题,那就是我们把自己和同学比较,这是一个巨大的错误。
坦率地说,工程学院的一些讲座没有正确地教授基础知识,让学生们认为编码很难。
X:你为什么不教你儿子编程?我听说它在将来很有用!
家长:我看了我儿子的大学教学大纲,他们教所有的编程语言。所以我会和他一起去GATE教练中心。
大多数学生不知道真实世界的编程与他们在大学里学到的不同。
记住,大学只教你基础知识。是的,你(学生)必须在这个领域出类拔萃。你们的父母不教你们编程并不是错误的,因为他们按照他们那代人的思维方式来思考。你必须教他们编码是多么重要!一些家长了解情况,并在辅导中心与孩子们一道学习,我真的很感激他们的决定,并衷心感谢他们。
编码没有年龄限制!任何人都可以学习编程!

很赞 3
收藏