热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过看书自学编程能成功吗?十年时间自学编程,给你一个答案!

Felleisen等人在他们的书《HowtoDesignPrograms》中提到,「糟糕的编程很容易,即便是白痴都可以在21天内学会」时,

Felleisen 等人在他们的书《How to Design Programs》中提到,「糟糕的编程很容易,即便是白痴都可以在 21 天内学会」时,请对这一观点表示赞同。

让我们来分析一下在 24 小时内学会 C++意味着什么:

自学:24 小时内,你将没有时间写几个重要的程序,并从成功和失败中吸取教训。你将没有时间和一个有经验的程序员一起工作,并理解在 C++环境中编程会是什么样子。简而言之,你将没有时间去学习多少东西。所以这本书只能说是肤浅的熟悉,而不是深刻的理解。正如 Alexander Pope 所说,只学会一点点点东西是危险的

C++:在 24 小时内,你也许能够学习 C++的一些语法(前提是你已经知道了另一种语言),但是你不能学到多少关于如何使用这门语言的知识。简而言之,如果你是一个基层的程序员,你可以学习用 C++语法编写 BASIC 程序,但是你不能学习到 C++真正的优缺点。那又有什么意义呢?Alan Perlis 曾经说过:「一种不影响你编程思维方式的语言,是不值得学习的。」有一种可能是,你必须学习一点 C++(或者是 Javascript 之类的东西),因为你需要用现有的工具接口来完成特定的任务。但这种情况下,你不是在学习如何编程,而是在学习如何完成这项任务。

在 24 小时内:不幸的是,这根本不够,正如下面所说的那样。

当然,没有一个数字可以作为最终的答案,假定所有的技能(如编程、下棋、跳棋和音乐演奏)都需要完全相同的时间来掌握,或者所有人都需要完全相同的时间是不合理的。正如 K. Anders Ericsson 教授所说,「在大多数领域,即使是最有才华的人也需要很多时间才能达到最高水平,这是非常值得注意的。10000 小时这个数字让你感觉到,我们说的是一周 10 到 20 个小时。」

你想成为一名程序员

以下是我的编程秘诀:

(1)对编程感兴趣,因为兴趣而编程。请保持足够的兴趣,以便你愿意投入你的 10 年或者 10000 小时。

(2)编码。最好的学习方式是实践。更严格地说,「在特定领域中,一个人的最高水平不是由于经验的积累自动获得的,而是经过深思熟虑的改进,经验丰富的人也可以提高水平。」,「最有效的学习需要有一个明确的任务,对特定的人来说难度适中,还要有信息反馈以及重复试错和纠正错误的机会。」「Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life」这本书正是这一观点的有趣参考。

(3)与其他程序员交谈;阅读其他程序。这比任何书籍或培训课程都重要。

(4)如果你愿意,可以在大学(或研究生院)呆四年。这将使你有机会获得一份需要证书的工作,让你对这个领域有更深的了解,但如果你不喜欢学校,你可以自学或在工作中获得类似的经验。无论如何,光靠书本知识是远远不够的。「The New Hacker's Dictionary」的作者 Eric Raymond 说:「计算机科学教育不能使任何人成为一个专业的程序员,就像学习刷子和颜料不可以使某人成为一个专业的画家一样。」我雇用过的最好的程序员之一只有高中学历,他开发了许多优秀的软件,拥有自己的团队,并且拥有足够买下一个夜店的股票期权。

(5)与其他程序员一起做项目。在某些项目上你是最好的程序员,而在某些项目上你是最差的程序员。当你是最好的时候,你可以锻炼主导一个项目的能力,并用你的远见激励别人。当你是最坏的时候,你可以学习大师们做什么,观察他们不喜欢做什么(因为他们会让你为他们做自己不喜欢的事情)。

(6)接手其他程序员的项目,理解别人写的程序。当原来的程序员不在时,学习需要怎样理解和修复程序。想想如何设计你的程序,让那些在你之后的人维护它们更容易些。

(7)学习至少六种编程语言。包括一种强调类抽象的语言(如 Java 或 C++),它强调函数抽象的语言(如 Lisp 或 ML 或 Haskell),一种支持句法抽象的语言(如 Lisp),一种支持声明性规范的语言(如 Prolog 或 C++模板),一种强调并发性的语言(像 Clojure 或 Go)。

(8)记住「computer science」中有一个「computer」。知道计算机执行一条指令、从内存中提取一个字符(有或没有缓存)、从磁盘中读取连续的字符以及在磁盘上寻找新的位置需要多长时间。

(9)参与语言标准化工作。它可能是 ANSI C++委员会,也可以是决定你自己的本地编码风格是有 2 个或者 4 个空间缩进。无论哪种方式,你都可以了解到其他人对一种语言的喜好,他们的感受有多深,甚至可能了解他们的感受。有很好的判断力,尽快适应语言的标准化

考虑到这一切,仅仅通过书本学习你能走多远是个值得怀疑的问题。

笔者是一名CC++的程序员,如果你想更好的提升你的编程能力,好好学习C/C++编程知识成为高薪软件开发工程师的话!那么你很幸运~

C语言C++编程学习交流圈子,Q群464501141点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍:

编程学习视频:

 


推荐阅读
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
author-avatar
137381372_e57647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有