哪种学习编程方式更好,系统学习还是边做边学?

昨晚在另一个地方贴了类似的答案:

学习编程,系统学习还是边做边学,哪种方式更好?

我昨天才进入知乎社区。不知道社区的转载主要是怎么用的,所以我就用了最传统的方式——复制粘贴,就这样翻过来了。

我在知乎注册的时候就看到这个问题,所以留到晚上来回答。

虽然我才毕业一年,但是因为竞争,我从小学低年级就开始学编程,直到大学学计算机,被各种老师教过,自学成才,并教给学生。

什么是编程?

当我刚开始学习的时候,面向对象和互联网,至少在中国还没有普及,甚至没有多少人知道。直到现在,这是每个人都看到的时代。

关于这段历史,我想说的是,“编程”对我来说从比赛开始到现在的“创造”,一直是两个范畴的概念;也是为了时代的需要,从之前的科学计算来看,在各个行业各个角落实现各种应用,不再是同一类行为。

但是,编程的本质和当年教科书上写的没有太大区别,就是写(广义上的)计算机可执行指令(集)。

这个领域的知识是什么样的?

然后延伸时代的问题。

从面向对象的开始,互联网时代的兴起,到现在的移动互联网时代,大部分编程的目的都是为了创造“软件”,而软件的创造也是由于快速涌入世界上最聪明的人,时代的需求压力形成了一整套工程,也就是“软件工程”。

现在“编程”集中在“软件工程”的需求中,其中一个结果就是“工程”,而“工程”则是整个生产系统的逐渐分化和专业化,因此这个领域出现了各种各样的目标专业,如“前端工程师”、“测试工程师”、“算法分析师”、“.NET软件工程师”。

在整个软件开发周期中,我们都需要在不同程度上与不同的人合作。甚至个人开发者也会使用开源代码和其他人制作的各种下载工具。

这是工程的结果,即“编程”与其他不同的专业,如数学、医学、建筑、人文等科学相结合,然后具体划分为各种相关模块。这些模块的一个特点是它们作为一个整体“彼此相邻”。

这是什么意思?

例如,但是在(a)网站开发方面,有客户,老板,艺术家,前端工程师,服务器端工程师搞自动化要学计算机编程语言吗,数据库管理员,网络推广等等。其中两个或两个角色可能有直接的工作关系,仅指软件项目的开发工作。

无论哪个是因,哪个是果,目前的情况是,两个人物之间的知识不一定相关,也不一定相交。从广度上讲,整个软件工程领域乃至全世界都是如此,但软件工程领域和建筑领域一样,具有比较大的量化专业化,一切都以证据和标准为基础。

到目前为止,一个结果是没有人可以掌握所有知识;所有的知识都是相关的,走相关路径学习的效果一般是最大的。

后者可以简单地证明,如果两条知识不能匹配,那么你将需要等待很长时间才能将它们连接起来并产生加成效果。虽然乔帮主说总有一天这些点会一直连在一起,不过嗯……靠谱也不错。

所以,学习这个领域是这样的

然后,回到学习,它变得清晰。开发的需求需要多种技能,所有技能都是相关的,一个项目所需要的技能大致限制在一定的时间范围内。如果你想开发某个东西,或者将它用于某种目的(比如科学计算),你需要某个知识点切入,从任何地方切入某个知识点,然后以相关的方式进行扩展。如果你在这个过程中看到一个你不理解的新排名,你可以要么立即“扩展”它,要么将它写下来,留给以后“点亮”这个人才。有一天这些点…

以上是学习编程时首先要知道的一点,这个领域的知识是如何组织的。下面的第二点是关于学习方法的。

一个误会和学习的结果

有句名言,布鲁克斯(Frederick P. Brooks)说过,最好的程序员比最差的输出差n倍。

为什么?计算机科学基本上来源于数学和机械学科。最大的特点是两个门槛:能不能做,这个方法(算法或设计)的效率如何。

前者不提了,后者最明显的例子就是加法计算和乘法计算的效率差别很大。

这个领域最大的特点就是他们的关系。要想打通,就需要“懂”,至少知道怎么用。您不知道如何使用公式或技术,您知道有,并且在需要时无法使用。所以学习是必要的学习习惯。

看到上面的内容,你可能觉得一开始就应该定一个目标,然后把这方面需要的知识点搞清楚,然后从某个点开始,就可以完成了通过学习这一切。 .

这是软件工程中的一个极端错误,学习也是如此,因为每一次开发基本上都是一个学习的过程,你不是*信息,你做的事都是别人做的,你肯定没做过。别人给你做,你不用做,腾*也不必照搬,对吧?

如果将这项研究视为一个项目,则错误是将整个项目理想化。整个项目本来就是这个世界上不存在的东西,没有人知道在开发(学习)的过程中会发生什么,哪有什么精心策划的可以信任?

如果您以这种方式学习,很容易陷入困境,拿起一本专业书籍(一个切入点),阅读它,然后观看并停止阅读。然后?然后就没有了……

我们是如何解决这个问题的

这个问题在软件工程中是如何解决的?每个项目都可以或多或少地使用敏捷开发。

详细解释可能太多了,毕竟我了解的不多。但是,最常见的一点是:将大计划分成几个小周期,每个周期后调整计划,使最新的计划可执行且有效;在计划中,每次的产出都是具体的、量化的,每个周期发布(生产)一个有效的、可用的产品,是对前一个产品的改进或补充;当原有输出难以升级时,对原有产品进行重构(重新设计)。 ,再生产)。

细节不多说了,出版了多少本书。

其实现在你能买到的所有好的编程教学书籍都遵循这种教学模式,也是目前最有效的书籍教学模式。这些书一般会教你从“Hello World!”开始。 (到时候你就知道是什么了),让你做一次,然后逐渐加深;有时做了一次之后,以后再引入新技术,然后会让你跟着新技术走一次;阅读整本书,你至少会达到一定的水平。

重要的是要注意,您必须做好心理准备,书上说的内容会与您所做的不同,或者您根本无法做到。比如书上说计算a+b会输出2,你的输出是3;书上说你需要点击一个按钮,但是你就是在你的机器上找不到那个按钮……这些都是难免的,而且一般需要很长时间。莫名其妙的问题本身就是上述问题的一部分,也是现代程序员加班的主要原因之一。毕竟你的机器肯定和作者的机器不一样。

所以学习应该是这样的

一般来说,当涉及到知识相关时,学习就是将不同的知识与不同的学习成本联系起来的过程。另外,值得鼓励的是,随着知识的增加,智力和经验都会增加,学习成本也会降低,学习起来更容易。

虽然你只知道和不了解某个知识点,但仍然存在一个问题,即你对某个特定方面了解多少。这又回到了刚才那句话,为什么生产效率差n倍。因为这是一场广度和深度的综合竞争,随着时间的推移,两个人的知识会形成“马太效应”,差距会成倍扩大。

不过不用担心,这种增长是有天花板的,不管是知识有限还是需求有限,至少从程序员的薪水就可以看出(哭)。

具体的学习建议

点击此处获取自上而下的学习建议:

我们先有个想法,比如学钢琴,也是一开始就想弹的歌,想出想用的产品,或者买一本好评如潮的入门书,目标是制作书中提出的“产品”

要细化这个目标,可以寻求专业帮助,梳理知识的“入口点”和周边的“连接点”,然后开始规划第一次迭代(做第一件事),可以是一个段落很短的程序或作品,但必须有特定的输出

每次输出后重新调整计划。您或专业人士可以专门评估此输出的价值,这一点很重要。跟着书看就很简单了,看书就行了。

如果你想给出一个具体的切入点搞自动化要学计算机编程语言吗,那么我的建议是两种选择:

从C语言入手,再学算法,走类路线

从网页制作开始,然后学习网站工程,走产品路线,是产品中最好的入口

不要太担心学错了,因为在工程层面,你所学的80%的知识不会被用作工具,而只会实现它们的历史使命——成为一些人的中间您现有的实践知识点/桥梁,为您当前的学习效率铺平道路。

实际上,对于一个“毕业”的程序员来说,学习一门新的编程语言可能只需要一周,而熟悉需要三周,精通开发需要三个月,精通只需要一年。这只是大概的。严格来说,不同语言关联的知识点数量是不同的。这也不会影响示例,因为在此之前,一名大学生正在学习他们的第一语言,通常是 C/C++,学习了一个学期,并且可能会不及格(这是态度问题或 Dota 问题)。

首先,不要急于求成。要是能快点搞定,那我们专业人士不应该喝西北风吗?

所以要真正解决学习范围的问题,你的下一个问题应该是“你应该达到什么知识”。当你在某个点扎根之后,你想的就是利用这个学习能力去到另一个你更喜欢的领域,或者以此为基础扩大范围,或者深入到这个领域(它是也是一种扩展,方向不同)。

最后要重申的一点是,软件开发本身就是一个学习过程,但输出的代码有不同的价值。软件的特殊性使得重复编写两段相同的代码变得困难,一般只能重写,或者重用原始代码(即复制粘贴或引用调用)。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论