学习编程有多难( 二)
正文翻译
How hard is it to learn programming?
学习编程有多难?
原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处
学习编程有多难?
原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处
评论翻译
Zbyszek Matuszewski, web application programmer
Zbyszek Matuszewski,网络应用程序程序员
Zbyszek Matuszewski,网络应用程序程序员
Why coding might seem hard in my opinion:
It needs a lot of patience. Code breaks very easily and usually even very small error breaks it totally. It’s like you write a book and one missing comma would make whole chapter unreadable mess and you need to find that comma (sometimes you will get feedback what’s missing on which page and line but not always).
It’s really slow process. You might think some awesome features quickly but it often tends to take hours to code them.
You need to break things like features or changes into very very tiny and detailed bits. You need to translate high level things like parts of user interface or interactions into very simple and crude steps that lead to realization of that higher level functions. It’s like talking/writing to someone that does not have clue about anything and understand only very simple things like how to add item to a list, how to sort a list, how to draw a rectangle etc.
为什么在我看来编码似乎很难:
这需要很大的耐心。代码很容易中断,通常即使是很小的错误也会完全中断。就像你写了一本书,一个逗号的缺失会让整章变得难以阅读,你需要找到那个逗号(有时你会得到反馈,哪一页哪一行缺少了什么,但并不总是如此)。
这是一个非常缓慢的过程。你可能很快会想到一些很棒的功能,但通常需要花费数小时来编写它们。
你需要将功能或更改等内容分解为非常微小和详细的部分。你需要将高级的东西,比如用户界面或交互的部分,转化为非常简单和粗糙的步骤,从而实现更高级别的功能。这就像与一个什么都不懂,只知道如何向列表中添加项目、如何对列表进行排序、如何绘制矩形等非常简单的事情的人交谈/写作一样。
某程序通常需要与其他不兼容的程序协同工作,并且需要大量代码才能协同工作,还需要考虑硬件、架构等。
It needs a lot of patience. Code breaks very easily and usually even very small error breaks it totally. It’s like you write a book and one missing comma would make whole chapter unreadable mess and you need to find that comma (sometimes you will get feedback what’s missing on which page and line but not always).
It’s really slow process. You might think some awesome features quickly but it often tends to take hours to code them.
You need to break things like features or changes into very very tiny and detailed bits. You need to translate high level things like parts of user interface or interactions into very simple and crude steps that lead to realization of that higher level functions. It’s like talking/writing to someone that does not have clue about anything and understand only very simple things like how to add item to a list, how to sort a list, how to draw a rectangle etc.
为什么在我看来编码似乎很难:
这需要很大的耐心。代码很容易中断,通常即使是很小的错误也会完全中断。就像你写了一本书,一个逗号的缺失会让整章变得难以阅读,你需要找到那个逗号(有时你会得到反馈,哪一页哪一行缺少了什么,但并不总是如此)。
这是一个非常缓慢的过程。你可能很快会想到一些很棒的功能,但通常需要花费数小时来编写它们。
你需要将功能或更改等内容分解为非常微小和详细的部分。你需要将高级的东西,比如用户界面或交互的部分,转化为非常简单和粗糙的步骤,从而实现更高级别的功能。这就像与一个什么都不懂,只知道如何向列表中添加项目、如何对列表进行排序、如何绘制矩形等非常简单的事情的人交谈/写作一样。
某程序通常需要与其他不兼容的程序协同工作,并且需要大量代码才能协同工作,还需要考虑硬件、架构等。
Programs often need to work with other programs that are often incompatible and need a lot of code to make it work together. Also need to think about hardware, architecture etc.
Programs often need to have few different qualities that often work against each other like performance vs elasticity. Need to think about them but not overthink them.
Code easily get harder and harder to manage. Small bad design decisions and “hacks” to make things quicker will build up over time. Code needs to be refactorized and need cuts here and there at least once in a while - otherwise even if you are top-notch coder it will deteriorate and became harder to code over time.
I wouldn’t say it is really hard. It’s more about patience and thinking a lot logically and not giving up and gathering experience what works well and what is not and how to manage code in a long-time (structure, good rules, design patterns) rather than some kind of hardness.
程序通常需要具备一些不同的品质,比如性能和弹性,这些品质往往相互矛盾。需要考虑它们,但不要过度思考。
代码很容易变得越来越难管理。随着时间的推移,一些小的糟糕设计决策和让事情变得更快的“黑客行为”会越来越多。代码需要重构,需要不时地进行删减,否则,即使你是一流的程序员,它也会随着时间的推移而恶化,变得更难编码。
我不会说这真的很难。它更多的是耐心和逻辑思考,不放弃和积累经验,什么工作得好,什么不好,以及如何长期管理代码(结构、良好的规则、设计模式),而不是某种难度。
Programs often need to have few different qualities that often work against each other like performance vs elasticity. Need to think about them but not overthink them.
Code easily get harder and harder to manage. Small bad design decisions and “hacks” to make things quicker will build up over time. Code needs to be refactorized and need cuts here and there at least once in a while - otherwise even if you are top-notch coder it will deteriorate and became harder to code over time.
I wouldn’t say it is really hard. It’s more about patience and thinking a lot logically and not giving up and gathering experience what works well and what is not and how to manage code in a long-time (structure, good rules, design patterns) rather than some kind of hardness.
程序通常需要具备一些不同的品质,比如性能和弹性,这些品质往往相互矛盾。需要考虑它们,但不要过度思考。
代码很容易变得越来越难管理。随着时间的推移,一些小的糟糕设计决策和让事情变得更快的“黑客行为”会越来越多。代码需要重构,需要不时地进行删减,否则,即使你是一流的程序员,它也会随着时间的推移而恶化,变得更难编码。
我不会说这真的很难。它更多的是耐心和逻辑思考,不放弃和积累经验,什么工作得好,什么不好,以及如何长期管理代码(结构、良好的规则、设计模式),而不是某种难度。
James Barton, Developed compilers/interpreters for several domain-specific-languages in C/C++
在C/ c++中为几种特定领域的语言开发了编译器/解释器
在C/ c++中为几种特定领域的语言开发了编译器/解释器
Figuring out what a user really wants.
Solving a problem while attending useless meetings.
Repairing existing code that you are building upon, so that your code works properly.
Breaking a solution down into manageable chunks and steps.
Making sense of a bunch of conflicting requirements.
Realizing that you are in a Dilbert cartoon without laughing out loud at the manager.
Trying to understand the arcane libraries and legacy code that you are working with.
Doing an hour's worth of red tape for every ten minutes worth of coding.
This is all in addition to keeping your train of thought between interruptions as well as many other challenges.
弄清楚用户真正想要什么。
在参加无用的会议时解决问题。
修复正在构建的现有代码,以便代码正常工作。
将解决方案分解为可管理的块和步骤。
理解一系列相互冲突的需求。
意识到你在演一部迪尔伯特漫画,却没有大声嘲笑经理。
试图理解您正在使用的神秘库和遗留代码。
每十分钟的编码就要花一个小时来处理繁琐的程序。
除此之外,你还需要在中断和其他许多挑战之间保持思路。
Solving a problem while attending useless meetings.
Repairing existing code that you are building upon, so that your code works properly.
Breaking a solution down into manageable chunks and steps.
Making sense of a bunch of conflicting requirements.
Realizing that you are in a Dilbert cartoon without laughing out loud at the manager.
Trying to understand the arcane libraries and legacy code that you are working with.
Doing an hour's worth of red tape for every ten minutes worth of coding.
This is all in addition to keeping your train of thought between interruptions as well as many other challenges.
弄清楚用户真正想要什么。
在参加无用的会议时解决问题。
修复正在构建的现有代码,以便代码正常工作。
将解决方案分解为可管理的块和步骤。
理解一系列相互冲突的需求。
意识到你在演一部迪尔伯特漫画,却没有大声嘲笑经理。
试图理解您正在使用的神秘库和遗留代码。
每十分钟的编码就要花一个小时来处理繁琐的程序。
除此之外,你还需要在中断和其他许多挑战之间保持思路。
David Harris, Education Experience Lead (2016-present)
David Harris,教育经历主管(2016-至今)
David Harris,教育经历主管(2016-至今)
Learning to code is easy and doesn’t take long at all.
You can get started learning how to code right away, and it doesn’t take that long to pick up the basics.
Consider this line of code:
print(“Hello world!”)
It’s probably not to hard to understand what’s supposed to happen there, even if you’ve never seen code before. It’s going to print Hello world! somewhere - hint: it’s not your printer.
The fundamentals of programming are taught in most universities or high schools in a single semester. There are online courses that can get you proficient with a single programming language in a matter of weeks or months.
There are some concepts that are easier if you understand some basic logic and can grasp the idea that computers are literal and will do exactly what you tell them to (and only that thing).
Learning to code is hard and it will take you the rest of your life.
The real challenge isn’t in learning how to write code. It’s not even in learning to write code well.
The thing that is actually hard is learning how to solve problems. And that’s the thing you will spend most of your time doing.
See, code is just a tool, like a hammer or a crochet needle or computer. It doesn’t do anything on its own. What makes it so cool is that can do anything if you need to solve a problem. That’s what software engineers do - solve problems.
In fact, most engineers I know don’t spend most of their time writing code. They spend most of their time thinking, reading and analyzing code. They research different approaches to problems and formulate possible solutions. Then, once they come up with a viable solution, they implement it. That process can vary significantly based on the environment (freelancer, working in an enterprise, working at a startup).
学习编码很容易,而且不需要花很长时间。
你可以马上开始学习如何编写代码,而且不需要那么长时间就能学会基本知识。
考虑这一行代码:
打印(“你好,世界!”)
即使你以前从未见过代码,也可能不难理解那里应该发生什么。它将打印“你好,世界”!到某处提示:这不是你的打印机。
大多数大学或高中在一个学期内教授编程基础知识。有一些在线课程可以让你在几周或几个月内精通一门编程语言。
如果你理解一些基本的逻辑,并且能够理解计算机是刻板的,并且会完全按照你的要求去做(而且只做那件事),那么有些概念就更容易理解了。
学习编码是很难的,它将花费你的余生。
真正的挑战不在于学习如何编写代码,它甚至不在于学习编写好代码。
真正困难的是学习如何解决问题。这是你大部分时间都在做的事情。
看,代码只是一种工具,就像锤子、钩针或电脑。它自己什么都不做。让它如此酷的是,如果你需要解决问题,它可以做任何事情。软件工程师就是这么做的——解决问题。
事实上,我认识的大多数工程师不会花大部分时间编写代码。他们大部分时间都在思考、阅读和分析代码。他们研究解决问题的不同方法,并制定可能的解决方案。然后,一旦他们提出可行的解决方案,他们就会实施它。这一过程可能因环境(自由职业者、在企业工作、在初创企业工作)的不同而有很大差异。
You can get started learning how to code right away, and it doesn’t take that long to pick up the basics.
Consider this line of code:
print(“Hello world!”)
It’s probably not to hard to understand what’s supposed to happen there, even if you’ve never seen code before. It’s going to print Hello world! somewhere - hint: it’s not your printer.
The fundamentals of programming are taught in most universities or high schools in a single semester. There are online courses that can get you proficient with a single programming language in a matter of weeks or months.
There are some concepts that are easier if you understand some basic logic and can grasp the idea that computers are literal and will do exactly what you tell them to (and only that thing).
Learning to code is hard and it will take you the rest of your life.
The real challenge isn’t in learning how to write code. It’s not even in learning to write code well.
The thing that is actually hard is learning how to solve problems. And that’s the thing you will spend most of your time doing.
See, code is just a tool, like a hammer or a crochet needle or computer. It doesn’t do anything on its own. What makes it so cool is that can do anything if you need to solve a problem. That’s what software engineers do - solve problems.
In fact, most engineers I know don’t spend most of their time writing code. They spend most of their time thinking, reading and analyzing code. They research different approaches to problems and formulate possible solutions. Then, once they come up with a viable solution, they implement it. That process can vary significantly based on the environment (freelancer, working in an enterprise, working at a startup).
学习编码很容易,而且不需要花很长时间。
你可以马上开始学习如何编写代码,而且不需要那么长时间就能学会基本知识。
考虑这一行代码:
打印(“你好,世界!”)
即使你以前从未见过代码,也可能不难理解那里应该发生什么。它将打印“你好,世界”!到某处提示:这不是你的打印机。
大多数大学或高中在一个学期内教授编程基础知识。有一些在线课程可以让你在几周或几个月内精通一门编程语言。
如果你理解一些基本的逻辑,并且能够理解计算机是刻板的,并且会完全按照你的要求去做(而且只做那件事),那么有些概念就更容易理解了。
学习编码是很难的,它将花费你的余生。
真正的挑战不在于学习如何编写代码,它甚至不在于学习编写好代码。
真正困难的是学习如何解决问题。这是你大部分时间都在做的事情。
看,代码只是一种工具,就像锤子、钩针或电脑。它自己什么都不做。让它如此酷的是,如果你需要解决问题,它可以做任何事情。软件工程师就是这么做的——解决问题。
事实上,我认识的大多数工程师不会花大部分时间编写代码。他们大部分时间都在思考、阅读和分析代码。他们研究解决问题的不同方法,并制定可能的解决方案。然后,一旦他们提出可行的解决方案,他们就会实施它。这一过程可能因环境(自由职业者、在企业工作、在初创企业工作)的不同而有很大差异。
Aryamaan Thakur, studied at The Tribhuvan School
Aryamaan Thakur在特里布万学校学习
原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处
Aryamaan Thakur在特里布万学校学习
原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处
The way it is taught!
Programming is something which can be learnt only through practice and discovering. It can't be mastered just by remembering the definitions and syntax.
If you code regularly, the syntax will automatically stick to your memory.
And the most important thing - Programming requires the ability to think not the ability to remember or write/type.
Let's see how programming is taught:-
If you are an ICSE student, you'll start learning Java from class VI. Isn't it amazing? You started learning to code at an age of 11 or 12!
But the Fact is…
You don't even know the meaning of programming. All you know is:-
The process of writing computer programs is known as programming.
You are asked to learn the definitions by heart and write the same in examinations.
You just learn syntax and forget them after a few days.
它的教学方式!
编程是只有通过实践和发现才能学会的东西,仅仅记住定义和语法是无法掌握它。
如果你定期编写代码,语法会自动留在你的记忆中。
最重要的是,编程需要的是思考能力,而不是记忆或书写/打字的能力。
让我们看看编程是如何教授的:
如果你是ICSE的学生,你将从第六课开始学习Java。这不是很神奇吗?你从11岁或12岁开始学习编码!
但事实是:
你甚至不知道编程的意义。你只知道:
编写计算机程序的过程称为编程。
你被要求背诵这些定义,并在考试中写出它们。
你只需学习语法,几天后就会忘记它们。
Programming is something which can be learnt only through practice and discovering. It can't be mastered just by remembering the definitions and syntax.
If you code regularly, the syntax will automatically stick to your memory.
And the most important thing - Programming requires the ability to think not the ability to remember or write/type.
Let's see how programming is taught:-
If you are an ICSE student, you'll start learning Java from class VI. Isn't it amazing? You started learning to code at an age of 11 or 12!
But the Fact is…
You don't even know the meaning of programming. All you know is:-
The process of writing computer programs is known as programming.
You are asked to learn the definitions by heart and write the same in examinations.
You just learn syntax and forget them after a few days.
它的教学方式!
编程是只有通过实践和发现才能学会的东西,仅仅记住定义和语法是无法掌握它。
如果你定期编写代码,语法会自动留在你的记忆中。
最重要的是,编程需要的是思考能力,而不是记忆或书写/打字的能力。
让我们看看编程是如何教授的:
如果你是ICSE的学生,你将从第六课开始学习Java。这不是很神奇吗?你从11岁或12岁开始学习编码!
但事实是:
你甚至不知道编程的意义。你只知道:
编写计算机程序的过程称为编程。
你被要求背诵这些定义,并在考试中写出它们。
你只需学习语法,几天后就会忘记它们。
You know all the basics. You know the loops and conditions. You know everything thing. You remember the sizes and definitions of all the data types but sadly you can't even code a single if statement if you are asked to do so. You know what an array is but you don't know how and where to use it.
All you know is that you will be asked to write a program which contains an array of list of vegetables.
And now if you are a student of CBSE
In class X(i.e. at an age of 15 or 16), you are taught the following things:-
How to create an email ID?
What is internet?(Just the definition)
What is a web browser?
How to search on internet using a search engine?
How to use a web browser?
How to dexe history?(hahaha)
And other things…
你知道所有的基本知识,你知道循环和条件,你什么都知道,你还记得所有数据类型的大小和定义,但遗憾的是,如果要求你编写一条“if”语句,你甚至无法编写它。你知道什么是数组,但你不知道如何使用它以及在哪里使用它。
你所知道的是,你将被要求编写一个包含蔬菜列表数组的程序。
现在如果你是CBSE的学生
在X班(即15岁或16岁),你会学到以下几点:-
如何创建电子邮件ID?
什么是互联网?(只是定义)
什么是网络浏览器?
如何使用搜索引擎在互联网上搜索?
如何使用网络浏览器?
如何删除历史?(哈哈哈)
还有其他事情等等。
All you know is that you will be asked to write a program which contains an array of list of vegetables.
And now if you are a student of CBSE
In class X(i.e. at an age of 15 or 16), you are taught the following things:-
How to create an email ID?
What is internet?(Just the definition)
What is a web browser?
How to search on internet using a search engine?
How to use a web browser?
How to dexe history?(hahaha)
And other things…
你知道所有的基本知识,你知道循环和条件,你什么都知道,你还记得所有数据类型的大小和定义,但遗憾的是,如果要求你编写一条“if”语句,你甚至无法编写它。你知道什么是数组,但你不知道如何使用它以及在哪里使用它。
你所知道的是,你将被要求编写一个包含蔬菜列表数组的程序。
现在如果你是CBSE的学生
在X班(即15岁或16岁),你会学到以下几点:-
如何创建电子邮件ID?
什么是互联网?(只是定义)
什么是网络浏览器?
如何使用搜索引擎在互联网上搜索?
如何使用网络浏览器?
如何删除历史?(哈哈哈)
还有其他事情等等。
Just imagine teaching these things to a student who is 15.
Deleting history is something very basic which nowadays even a child of primary school can do!
And let me now tell you my story
A few days back(on 15th Dec 2017), I gave my computer test(pre boards) and practical (I'm a student of class 10).
Each and every student completed the 2.5 hour paper within a single hour. After the written exam we gave the practical which was of another 2.5h.
The chapters were MS-Access, HTML(the most basic one - no CSS,no JS - nothing. Just simple HTML) and XML(again the very basic one).
I was interested as I like coding and spending my time on computers. I thought that I will use CSS and make my webpage extremely attractive and shock everyone. So, I pushed the START button.
But do you know what happened?
Teacher: Shut it down! You don't need it.
Me(shocked): But why sir?
Teacher: You are supposed write the steps. The question paper and answer sheet will be provided to you.
Wtf??
Is this a practical exam? Is this how practicals take place? What's the need of practical then? And many other questions came to my mind.
THIS SYSTEM OF TEACHING TO CODE MUST BE CHANGED! And I will definitely try my best to do so.
Note: India is famous for engineers and programmers. That's true! But we don't learn it in schools. We learn it on our own.
This is my first long answer!! Please upvote if you liked it…
想象一下,把这些东西教给一个15岁的学生。
删除历史记录是一件非常基本的事情,现在连小学的孩子都能做到!
现在让我告诉你我的故事
几天前(2017年12月15日),我进行了计算机测试(预科)和实践(我是10班的学生)。
每个学生都在一小时内完成了2.5小时的论文。笔试结束后,我们又进行了2.5小时的实操。
这些章节分别是MS Access、HTML(最基本的,没有CSS,没有JS,什么都没有,只是简单的HTML)和XML(同样是最基本的)。
我很感兴趣,因为我喜欢编码和花时间在电脑上。我想我会使用CSS,让我的网页非常有吸引力,让每个人都震惊。于是,我按了启动按钮。
但你知道发生了什么吗?
老师:把它关掉!你不需要它。
我(震惊):为什么,先生?
老师:你应该写步骤。试卷和答题纸将会发给你们。
卧槽
这是实操考试吗?实操就是这样发生的吗?那么,什么是实用的需求呢?我想到了许多其他问题。
这种代码教学体系必须改变!我一定会尽力做到这一点。
注:印度以工程师和程序员而闻名。没错!但我们不是在学校里学的,我们自己学习的。
这是我发布的第一个长答案!如果你喜欢,请点赞。
Deleting history is something very basic which nowadays even a child of primary school can do!
And let me now tell you my story
A few days back(on 15th Dec 2017), I gave my computer test(pre boards) and practical (I'm a student of class 10).
Each and every student completed the 2.5 hour paper within a single hour. After the written exam we gave the practical which was of another 2.5h.
The chapters were MS-Access, HTML(the most basic one - no CSS,no JS - nothing. Just simple HTML) and XML(again the very basic one).
I was interested as I like coding and spending my time on computers. I thought that I will use CSS and make my webpage extremely attractive and shock everyone. So, I pushed the START button.
But do you know what happened?
Teacher: Shut it down! You don't need it.
Me(shocked): But why sir?
Teacher: You are supposed write the steps. The question paper and answer sheet will be provided to you.
Wtf??
Is this a practical exam? Is this how practicals take place? What's the need of practical then? And many other questions came to my mind.
THIS SYSTEM OF TEACHING TO CODE MUST BE CHANGED! And I will definitely try my best to do so.
Note: India is famous for engineers and programmers. That's true! But we don't learn it in schools. We learn it on our own.
This is my first long answer!! Please upvote if you liked it…
想象一下,把这些东西教给一个15岁的学生。
删除历史记录是一件非常基本的事情,现在连小学的孩子都能做到!
现在让我告诉你我的故事
几天前(2017年12月15日),我进行了计算机测试(预科)和实践(我是10班的学生)。
每个学生都在一小时内完成了2.5小时的论文。笔试结束后,我们又进行了2.5小时的实操。
这些章节分别是MS Access、HTML(最基本的,没有CSS,没有JS,什么都没有,只是简单的HTML)和XML(同样是最基本的)。
我很感兴趣,因为我喜欢编码和花时间在电脑上。我想我会使用CSS,让我的网页非常有吸引力,让每个人都震惊。于是,我按了启动按钮。
但你知道发生了什么吗?
老师:把它关掉!你不需要它。
我(震惊):为什么,先生?
老师:你应该写步骤。试卷和答题纸将会发给你们。
卧槽
这是实操考试吗?实操就是这样发生的吗?那么,什么是实用的需求呢?我想到了许多其他问题。
这种代码教学体系必须改变!我一定会尽力做到这一点。
注:印度以工程师和程序员而闻名。没错!但我们不是在学校里学的,我们自己学习的。
这是我发布的第一个长答案!如果你喜欢,请点赞。
Ian Brown, Senior software developer, jack-of-all-trades programmer
伊恩·布朗,高级软件开发人员,万能程序员
伊恩·布朗,高级软件开发人员,万能程序员
Writing code, once you know how, mostly isn’t that hard. Programming languages have a limited number of keywords and constructs, so the basics aren’t that hard. The problem is that developing software goes well beyond the syntax and semantics of the language. That’s where it gets hard and experience matters.
Developing a new program starts with at least some understanding of what the program is supposed to do. If you are lucky, you will start from a specification. If you are incredibly lucky, it will be well-written, will not be either over- or under-specified, and will have buy in from everyone. More likely, it will have issues with all of those things, will be incomplete and inaccurate in places. In any case, the odds are that by the time you finish, the actual product will only bear a passing resemblance to the original specification.
From your understanding of the problem, the need, or the opportunity, you will need to develop a plan for the program. This might be an in-depth design, or it may just be a skeleton, a basic plan for an approach, to be filled in as ideas are refined and problems are met and overcome.
Now the work of implementing the solution begins. Keep in mind that computers are essentially idiot-savants. They know how to do some very basic things perfectly accurately and fast, but nothing more. Everything beyond those simple things requires software, whether written by the members of the team developing the software, or in the form of general libraries and frxworks available from third parties. This is where even the implementation of something that seems simple becomes much more difficult.
一旦你知道如何编写代码,大多数情况下并不难。编程语言的关键字和结构数量有限,所以基础知识并不难。问题是,开发软件远远超出了语言的语法和语义。这就是困难所在,经验很重要。
开发一个新的程序首先至少要对程序应该做什么有所了解。如果幸运的话,你将从一个规范开始。如果你非常幸运,它会写得很好,不会过多或过少,并且会得到所有人的认可。更有可能的是,它会有诸多问题,在某些地方不完整和不准确的。在任何情况下,都有可能在你完成的时候,实际的产品只会与最初的规格有一点相似。
根据你对问题、需求或机会的理解,你需要为该计划制定计划。这可能是一个深入的设计,也可能只是一个框架,一个方法的基本计划,随着想法的完善、问题的解决和克服而填充。
现在,实施解决方案的工作开始了。请记住,计算机本质上是白痴学者。他们知道如何准确快速地完成一些非常基本的事情,但仅此而已。除了这些简单的东西之外,任何东西都需要软件,无论是由开发软件的团队成员编写的,还是以第三方提供的通用库和框架的形式编写的。在这一点上,即使是看似简单的事情的实现也变得更加困难。
原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处
Developing a new program starts with at least some understanding of what the program is supposed to do. If you are lucky, you will start from a specification. If you are incredibly lucky, it will be well-written, will not be either over- or under-specified, and will have buy in from everyone. More likely, it will have issues with all of those things, will be incomplete and inaccurate in places. In any case, the odds are that by the time you finish, the actual product will only bear a passing resemblance to the original specification.
From your understanding of the problem, the need, or the opportunity, you will need to develop a plan for the program. This might be an in-depth design, or it may just be a skeleton, a basic plan for an approach, to be filled in as ideas are refined and problems are met and overcome.
Now the work of implementing the solution begins. Keep in mind that computers are essentially idiot-savants. They know how to do some very basic things perfectly accurately and fast, but nothing more. Everything beyond those simple things requires software, whether written by the members of the team developing the software, or in the form of general libraries and frxworks available from third parties. This is where even the implementation of something that seems simple becomes much more difficult.
一旦你知道如何编写代码,大多数情况下并不难。编程语言的关键字和结构数量有限,所以基础知识并不难。问题是,开发软件远远超出了语言的语法和语义。这就是困难所在,经验很重要。
开发一个新的程序首先至少要对程序应该做什么有所了解。如果幸运的话,你将从一个规范开始。如果你非常幸运,它会写得很好,不会过多或过少,并且会得到所有人的认可。更有可能的是,它会有诸多问题,在某些地方不完整和不准确的。在任何情况下,都有可能在你完成的时候,实际的产品只会与最初的规格有一点相似。
根据你对问题、需求或机会的理解,你需要为该计划制定计划。这可能是一个深入的设计,也可能只是一个框架,一个方法的基本计划,随着想法的完善、问题的解决和克服而填充。
现在,实施解决方案的工作开始了。请记住,计算机本质上是白痴学者。他们知道如何准确快速地完成一些非常基本的事情,但仅此而已。除了这些简单的东西之外,任何东西都需要软件,无论是由开发软件的团队成员编写的,还是以第三方提供的通用库和框架的形式编写的。在这一点上,即使是看似简单的事情的实现也变得更加困难。
原创翻译:龙腾网 https://www.ltaaa.cn 转载请注明出处
Have you ever tried to tell someone how to do something? I mean down to the very simplest steps. Even the following example involves steps that are too high level, but it will give you an idea of what I mean. Consider trying to explain how to tell someone to boil an egg. The egg is in the refrigerator, the pans are in a drawer, there is a sink, and a stove. The instructions might be something like this (start with someone facing the refrigerator):
Walk three steps straightforward,
Raise your right arm to horizontal,
Open your right hand,
Move your right arm forward until your fingers are around the door handle,
Close your right hand until you can feel the handle firmly,
Keeping your hand closed, pull your arm back,
Stop before something hits your face,
Take a step backwards,
Push your right hand to the right,
While pushing, open your hand,
Allow the handle to move away from your hand,
[many more instructions follow]
你有没有试过告诉别人怎么做?我指的是最简单的步骤。甚至下面的例子也涉及到一些级别过高的步骤,但它会让你明白我的意思。试着解释如何告诉某人煮鸡蛋。鸡蛋在冰箱里,盘子在抽屉里,有一个水槽和一个炉子。说明可能是这样的(从面对冰箱的人开始):
直走三步,
将右臂抬到水平位置,
张开你的右手,
将右臂向前移动,直到手指绕过门把手,
闭上你的右手,直到你能牢固地感觉到把手,
手指握紧,手臂向后拉,
在有东西打到你脸前停下,
后退一步,
把你的右手放回右边,
在推的同时,张开你的手,
让把手远离你的手,
[接下来还有更多说明]
Walk three steps straightforward,
Raise your right arm to horizontal,
Open your right hand,
Move your right arm forward until your fingers are around the door handle,
Close your right hand until you can feel the handle firmly,
Keeping your hand closed, pull your arm back,
Stop before something hits your face,
Take a step backwards,
Push your right hand to the right,
While pushing, open your hand,
Allow the handle to move away from your hand,
[many more instructions follow]
你有没有试过告诉别人怎么做?我指的是最简单的步骤。甚至下面的例子也涉及到一些级别过高的步骤,但它会让你明白我的意思。试着解释如何告诉某人煮鸡蛋。鸡蛋在冰箱里,盘子在抽屉里,有一个水槽和一个炉子。说明可能是这样的(从面对冰箱的人开始):
直走三步,
将右臂抬到水平位置,
张开你的右手,
将右臂向前移动,直到手指绕过门把手,
闭上你的右手,直到你能牢固地感觉到把手,
手指握紧,手臂向后拉,
在有东西打到你脸前停下,
后退一步,
把你的右手放回右边,
在推的同时,张开你的手,
让把手远离你的手,
[接下来还有更多说明]
As I noted, the steps of this example are not detailed enough. Computers don’t understand terms like ‘handle’, ‘hand’, ‘arm’, or concepts like ‘walk’. To accomplish the above as written, a programmer would have to have access to existing pieces of code that provide even more detailed instructions on how to identify a ‘handle’ or ‘arm’, to perform movements like ‘walk’ or ‘pull’ or ‘push’, etc.
Learning to pretty much automatically think this way is challenging. Figuring out why your instructions do not, quite, accomplish what you want them to do can be frustrating and time-consuming.
Sometimes it isn’t even your instructions that are at fault - it may be that the third party library you are using to make the robot move has a defect that causes a tiny wobble. Much of the time, it isn’t enough for anyone to notice, but it might be enough to cause the robot to occasionally drop the egg on the edge of the pot rather than lower it into the water. If the programmer is under pressure to deliver, the only solution that can be implemented in time may be to move another part of the robot to counterbalance the wobble.
Some people enjoy dealing with things like this, some don’t. For those that do, the challenges of programming can be the thing that motivates them. For those that don’t, the frustration of dealing with the minutiae of every little niggling detail too much for them to deal with.
正如我所指出的,这个例子的步骤不够详细。计算机不理解“把手”、“手”、“手臂”等术语,也不理解“行走”等概念。为了完成上面所写的,程序员必须能够访问现有的代码片段,这些代码片段提供了关于如何识别“把手”或“手臂”的更详细说明,以执行“行走”、“拉动”或“推动”等动作。
学会几乎自动地以这种方式思考是很有挑战性的。弄清楚为什么你的指令不能完全完成你想要他们做的事情可能会让人沮丧,也很耗时。
有时,甚至不是你的指令出了问题——可能是你用来让机器人移动的第三方软件库有一个导致微小抖动的缺陷。很多时候,这还不足以让任何人注意到,但这可能足以让机器人偶尔把鸡蛋扔到锅边上,而不是把它放进水里。如果程序员面临交付的压力,唯一能及时实施的解决方案可能是移动机器人的另一部分,以抵消摆动。
有些人喜欢处理这样的事情,有些人不喜欢。对于那些喜欢的人来说,编程的挑战可能是他们的动力。对于那些不这样做的人来说,处理每一个琐碎细节的挫败感对他们来说就太多了。
Learning to pretty much automatically think this way is challenging. Figuring out why your instructions do not, quite, accomplish what you want them to do can be frustrating and time-consuming.
Sometimes it isn’t even your instructions that are at fault - it may be that the third party library you are using to make the robot move has a defect that causes a tiny wobble. Much of the time, it isn’t enough for anyone to notice, but it might be enough to cause the robot to occasionally drop the egg on the edge of the pot rather than lower it into the water. If the programmer is under pressure to deliver, the only solution that can be implemented in time may be to move another part of the robot to counterbalance the wobble.
Some people enjoy dealing with things like this, some don’t. For those that do, the challenges of programming can be the thing that motivates them. For those that don’t, the frustration of dealing with the minutiae of every little niggling detail too much for them to deal with.
正如我所指出的,这个例子的步骤不够详细。计算机不理解“把手”、“手”、“手臂”等术语,也不理解“行走”等概念。为了完成上面所写的,程序员必须能够访问现有的代码片段,这些代码片段提供了关于如何识别“把手”或“手臂”的更详细说明,以执行“行走”、“拉动”或“推动”等动作。
学会几乎自动地以这种方式思考是很有挑战性的。弄清楚为什么你的指令不能完全完成你想要他们做的事情可能会让人沮丧,也很耗时。
有时,甚至不是你的指令出了问题——可能是你用来让机器人移动的第三方软件库有一个导致微小抖动的缺陷。很多时候,这还不足以让任何人注意到,但这可能足以让机器人偶尔把鸡蛋扔到锅边上,而不是把它放进水里。如果程序员面临交付的压力,唯一能及时实施的解决方案可能是移动机器人的另一部分,以抵消摆动。
有些人喜欢处理这样的事情,有些人不喜欢。对于那些喜欢的人来说,编程的挑战可能是他们的动力。对于那些不这样做的人来说,处理每一个琐碎细节的挫败感对他们来说就太多了。
Vladimir Djurovic, works at Freelancing
弗拉基米尔·久罗维奇,自由职业者
弗拉基米尔·久罗维奇,自由职业者
Programming is highly skilled profession, in high demand and with high salaries. High demand for programmers has led to proliferation of bootcamps, online courses and schools for learning programming. The media makes it sound like you just need to take a few weeks bootcamp, and you can get a job at Google making six figures salary.
In reality, learning to program is no easier than learning to be an electrical engineer, lawyer, doctor or any other highly skilled profession. It takes hard work and dedication.
Of course, it helps if you have some kind of affinity toward programming. Some people learn it quickly, some slower. Some get disillusioned and quit.
So, short answer: yes, learning to program is hard. It’s not a coincidence that college level CS degree takes 4 years to complete. You need time to digest and understand all the concepts you learn.
编程是一种高技能的职业,需求量大,薪水高。对程序员的高需求导致了训练营、在线课程和编程学习学校的激增。媒体说,你只需要花几个星期的训练,就可以在谷歌找到一份薪水六位数的工作。
实际上,学习编程并不比学习成为一名电气工程师、律师、医生或任何其他高技能职业容易,这需要努力工作和奉献精神。
当然,如果你对编程有某种亲和力,这会有所帮助。有些人学得快,有些人学得慢。有些人幻想破灭,放弃了。
所以,简短的回答是:难,学习编程很难。大学水平的计算机科学学位需要4年才能完成,这不是巧合。你需要时间来消化和理解你所学的所有概念。
In reality, learning to program is no easier than learning to be an electrical engineer, lawyer, doctor or any other highly skilled profession. It takes hard work and dedication.
Of course, it helps if you have some kind of affinity toward programming. Some people learn it quickly, some slower. Some get disillusioned and quit.
So, short answer: yes, learning to program is hard. It’s not a coincidence that college level CS degree takes 4 years to complete. You need time to digest and understand all the concepts you learn.
编程是一种高技能的职业,需求量大,薪水高。对程序员的高需求导致了训练营、在线课程和编程学习学校的激增。媒体说,你只需要花几个星期的训练,就可以在谷歌找到一份薪水六位数的工作。
实际上,学习编程并不比学习成为一名电气工程师、律师、医生或任何其他高技能职业容易,这需要努力工作和奉献精神。
当然,如果你对编程有某种亲和力,这会有所帮助。有些人学得快,有些人学得慢。有些人幻想破灭,放弃了。
所以,简短的回答是:难,学习编程很难。大学水平的计算机科学学位需要4年才能完成,这不是巧合。你需要时间来消化和理解你所学的所有概念。
Ashutosh Singh, CTO | Stock Trader | AI Enthusiast at Yash Infotech (2001-present)
Ashutosh Singh, Yash Infotech首席技术官股票交易员|人工智能爱好者(2001年至今)
Ashutosh Singh, Yash Infotech首席技术官股票交易员|人工智能爱好者(2001年至今)
No its a myth. Coding is not at all hard. Only after a certain level , questions require a great deal of imagination to draw a picture of the situation in mind. Sometimes the task involves too much of nesting ( one thing composed of two things, each of those two things in turn are composed of three things each, now each of those three things again are composed of two things…and so on the depth of nesting goes on increasing and ultimately making the whole thing too complex to be clearly concieved by an average brain.
After a certain level everything(subject) becomes very hard.
just follow a simple rule of attempting at least 5–10 programming problems daily. Give your best upto 3 attempts to each problem, if you are still not able to solve it, see its solution(no harm if you could not solve it on your own). Now that will go and sit in your brain. Next time you will see a problem similar to it , perhaps you will be able to solve it on your own.
不,学会编程不是个神话,编码一点也不难。只有在达到一定程度后,才需要大量的想象力来描绘脑海中的情况。有时这项任务涉及太多的嵌套(一件事物由两件事物组成,这两件事物依次由三件事物组成,现在这三件事物中的每一件又由两件事物组成等,因此,嵌套的深度不断增加,最终使整个事物变得过于复杂,以至于普通大脑无法清楚地理解。
达到一定水平后,一切都变得非常困难。
只要遵循一个简单的规则,每天尝试至少5-10个编程问题。每个问题最多尝试三次,如果你仍然无法解决问题,请查看其解决方案(如果你自己解决不了也没关系)。现在,它将进入你的大脑。下次你看到类似的问题,也许你能自己解决。
After a certain level everything(subject) becomes very hard.
just follow a simple rule of attempting at least 5–10 programming problems daily. Give your best upto 3 attempts to each problem, if you are still not able to solve it, see its solution(no harm if you could not solve it on your own). Now that will go and sit in your brain. Next time you will see a problem similar to it , perhaps you will be able to solve it on your own.
不,学会编程不是个神话,编码一点也不难。只有在达到一定程度后,才需要大量的想象力来描绘脑海中的情况。有时这项任务涉及太多的嵌套(一件事物由两件事物组成,这两件事物依次由三件事物组成,现在这三件事物中的每一件又由两件事物组成等,因此,嵌套的深度不断增加,最终使整个事物变得过于复杂,以至于普通大脑无法清楚地理解。
达到一定水平后,一切都变得非常困难。
只要遵循一个简单的规则,每天尝试至少5-10个编程问题。每个问题最多尝试三次,如果你仍然无法解决问题,请查看其解决方案(如果你自己解决不了也没关系)。现在,它将进入你的大脑。下次你看到类似的问题,也许你能自己解决。
In this way, as you encounter more and more problems daily and keep on adding their solutions into your brain, after sometime, say a few years, your brain will become a powerhouse(reservior) of hundreds of problem solving and coding techniques with the help of which you will become a very good coder and be able to solve complex problems on your own.
It takes time and effort to train the brain, but it can be trained with regular practice. In fact this is the basis of Machine learninng ….we provide both the input(problem) and their corresponding outputs (solutions) to the computer , and gradually with time as the computer gains more and more data(reservior) of such sample pairs of “problems:solutions” it is able to predict the solution for a completely new input on its own. This is nothing but what we call as Learning.
You can also learn and become a great programmer! It only requires persistence.
这样,当你每天遇到越来越多的问题,并不断地将它们的解决方案添加到你的大脑中时,过了一段时间,比如说几年,你的大脑将成为解决数百种问题和编码技术的动力库(储备库),借助这些技术,你将成为一名非常优秀的编码员,并能够独自解决复杂的问题。
训练大脑需要时间和精力,但可以通过经常练习来训练。事实上,这是机器学习的基础。我们向计算机提供输入(问题)和相应的输出(解决方案),随着时间的推移,随着计算机获得越来越多的“问题:解决方案”样本对应的数据(储备),它能够自行预测一个全新输入的解决办法,这就是我们所说的学习。
你也可以学习并成为一名伟大的程序员!它只需要坚持。
It takes time and effort to train the brain, but it can be trained with regular practice. In fact this is the basis of Machine learninng ….we provide both the input(problem) and their corresponding outputs (solutions) to the computer , and gradually with time as the computer gains more and more data(reservior) of such sample pairs of “problems:solutions” it is able to predict the solution for a completely new input on its own. This is nothing but what we call as Learning.
You can also learn and become a great programmer! It only requires persistence.
这样,当你每天遇到越来越多的问题,并不断地将它们的解决方案添加到你的大脑中时,过了一段时间,比如说几年,你的大脑将成为解决数百种问题和编码技术的动力库(储备库),借助这些技术,你将成为一名非常优秀的编码员,并能够独自解决复杂的问题。
训练大脑需要时间和精力,但可以通过经常练习来训练。事实上,这是机器学习的基础。我们向计算机提供输入(问题)和相应的输出(解决方案),随着时间的推移,随着计算机获得越来越多的“问题:解决方案”样本对应的数据(储备),它能够自行预测一个全新输入的解决办法,这就是我们所说的学习。
你也可以学习并成为一名伟大的程序员!它只需要坚持。
Ramu Mudunuri, former Full Stack Developer
Ramu Mudunuri,前全栈开发人员
Ramu Mudunuri,前全栈开发人员
No, from my perspective if you feel anything tough it's tough, feels easy it's easy.
For learning programming language first you need concentrate on what you are learning and patience if you stack anywhere.
Second pick language which will use for your feature projects and split language into modules then start learning one by one.
If have interest to learn then it is very is to learn any programming language and succeed in your life.
从我的角度来看不难,如果你觉得有什么困难,那就很困难,如果感觉很容易,就很容易。
首先学习编程语言,你需要专注于你正在学习的东西,你在任何时候都要有耐心。
选择将用于功能项目的第二种语言,并将语言拆分为模块,然后开始逐个学习。
如果你有学习兴趣,那么学习任何编程语言并在生活中取得成功都是非常重要的。
For learning programming language first you need concentrate on what you are learning and patience if you stack anywhere.
Second pick language which will use for your feature projects and split language into modules then start learning one by one.
If have interest to learn then it is very is to learn any programming language and succeed in your life.
从我的角度来看不难,如果你觉得有什么困难,那就很困难,如果感觉很容易,就很容易。
首先学习编程语言,你需要专注于你正在学习的东西,你在任何时候都要有耐心。
选择将用于功能项目的第二种语言,并将语言拆分为模块,然后开始逐个学习。
如果你有学习兴趣,那么学习任何编程语言并在生活中取得成功都是非常重要的。
很赞 0
收藏