【随笔】编程能力和程序员

(1)什么是真正的编程能力?
知乎上曾经有人问过,什么是真正的编程能力,答案有很多,比较有代表性的观点有这几种:
第一种观点是,编程就是数据结构和算法,第二种观点是编程能力就是系统集成能力,第三种观点是从软件工程的角度出发,分析建模能力和写高质量代码(可维护性,扩展性等),还有一种观点是很抽象的解决问题的能力。
其实每一种看法都有他的道理和逻辑,但是总是让我觉得不够全面,最近一段时间重读《深入理解计算机系统》,看到推荐序里上海交大软件学院院长的一段话对我很有启发,我尝试来说明一下我的观点。
计算机系统本身就是分层次的,不同类型的软件开发对编程能力的要求是不一样的,但是核心的共通点在于抽象。我们可以把计算机中的抽象能力分为三类,第一种是问题抽象,强调的是软件工程师作为沟通机器世界和现实世界的桥梁,需要具备的将现实问题转换和翻译为计算机中的软件抽象的能力,也就是软件工程中所谓的“需求分析”和“建模”,更细化就是运用主流的面向对象的方法来做总体设计。
第二类就是数据抽象,核心是对数据结构和算法的选择和模块化设计(高内聚低耦合,可维护,可扩展等)。数据结构和算法的选择强调的是对设计的决策,你作为一个软件工程师,需要选择符合要求,时间复杂度和空间复杂度都尽量好的数据结构和算法,让软件能有比较好的工作效率,要能达到这样的效果就需要不同数据结构的适用范围和效率都有比较好的掌握。模块化设计则是考察一个软件工程师两方面的能力,一是能否合适的控制复杂度和二是代码质量如何。
最后一类就是系统抽象,核心在于学习和理解系统对程序的支持和制约。计算机系统本身是分层的,第一层是硬件和指令集组成的,我们可以把它称为汇编虚拟机,第二层就是操作系统提供的虚拟机,核心在于进程,虚拟内存,文件三个抽象,以及系统调用,第三层就是编程语言提供的虚拟机,这一层通常都是用软件来模拟硬件,并设计了指令集来达到良好的可移植性,比如最典型he的的Java,第四层是我自己的一种看法,其实就是开发软件所用的框架,框架也为开发者提供了封装好的接口和软件抽象,同样具有系统的特征。
那么系统抽象为什么重要?我之前也比较困惑于学习底层原理究竟有什么用,最近重读《深入理解计算机系统》有了一些更深的体会。从一个使用者而非构建者的角度,理解学习底层的意义在于,了解系统对程序的支持和限制,以及对程序正确性和效率上的制约。简单举例子,为什么两个大数相加之和在计算机中有时候会是负数,就是CPU加法器的局限性,不了解这种局限性就可能会导致bug,再比如高级语言都提供了一组使用方便的数据结构和容器,而他们的底层实现对他们的效率影响巨大,如果不了解,就不可能在选择决策时做出最优解。所以至少来说,作为一个写应用程序的软件工程师,你至少对使用的框架有源码级的理解和掌握才能确保高效和准确的使用它。
(2).程序员是否是一个好职业?

知乎上对程序员这个职业的看法,有两种比较极端的观点,第一种是劝退:程序员就是青春饭,三十五岁不转管理前景惨淡。第二种观点是劝进,穷就学计算机,前景光明,年入几十万。

这两种观点其实都隐含了一个很微妙的看法,可能也是共识——计算机相对来说是理工科里面比较简单的,自学计算机是可能的,自学其他更难的工科,比如飞行器设计可能么?所以一方面因为简单,所以容易变成青春饭,另一方面因为简单,所以才能有大量的非计算机专业的人成功转行。

如果这两种观点都是正确的,那么程序员这个行业究竟是怎么样的?我们可以大概猜测一下:假设一个人是非计算机专业,他18岁左右上大学,22岁左右大学毕业,大学期间或者毕业之后决定转计算机,途径可能是自学,可能是培训班,也可能是考研计算机专业,取个平均24岁入行,到35岁之前有十年的工作时间,假设工资能到每年平均二十五万,十年时间大概赚250万,然而同时软件行业发达的城市集中在一二线城市,房价高生活成本高,这两百五十万扣去花销,十年之后基本也不剩多少钱,如果上面第一种观点是正确的,三十五岁不升管理就失业,基本就是中年危机开始了,推论就是学计算机前途好就是伪命题。如果三十五岁不升管理不会失业,推论就是程序员不是青春饭。

那究竟哪种说法是对的呢?我觉得是受几方面的推力影响,第一是人口老龄化带来的劳动力压力,决定了有经验的程序员不会被轻易淘汰。第二是技术进步带来的人和软件的竞争压力,就像随着工厂自动化淘汰了低端工人,随着软件业各种基础设施(云计算平台,软件厂商)和开源软件逐渐成熟,绝大多数程序员的工作谈不上太高的技术含量,对于大多数没有太多用户的公司,也不用考虑什么优化和效率,只用完成基本功能,这事实上就是一个向下的压力。第三就可能更加虚无一些,假设未来新的技术带来新需求,能够让程序员这个行业保持高薪的同时,还能容纳下更多的人,程序员也就能一直繁荣下去。

目前我们可能就刚好处于这样一个转折点,移动互联网带来的红利已经逐渐耗尽,云计算大数据这些几年前还是概念的东西,已经成为日常生活的一部分,而新的技术比如:区块链,深度学习,vr逐渐冷却,并没有能成为预期的新增长点,另一方面5G,物联网,无人驾驶似乎已经开始走向成熟,可能成为新的经济引擎。
所以结论呢,就是没有结论,谁也不能准确预测未来。最后引用我写过的一段话作为结尾:

洪流已至,无法逃避,勇士请拔剑高歌。

所以,勇闯新世界

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: typora.7z 是一款非常实用的程序员笔记软件。它采用了简洁的设计风格,提供了丰富的文本编辑功能,帮助程序员能够轻松记录和管理自己的代码和笔记。 typora.7z 的主要特点有以下几点: 首先,typora.7z 提供了所见即所得的编辑界面,简化了程序员的操作过程。用户可以直接在编辑界面中进行文本的编写,并实时预览效果,无需频繁切换窗口或刷新页面。这种所见即所得的编辑方式使得程序员可以更加专注于内容创作,提高了工作效率。 其次,typora.7z 支持各种主流的格式和语法。程序员可以使用Markdown语法进行文本的编辑,这种语法简单易学,能够很方便地实现标题、列表、代码块等常用功能。此外,typora.7z 还支持LaTeX数学公式、流程图、时序图等特殊格式的插入,满足程序员在编写技术文档时的多样化需求。 此外,typora.7z 还提供了丰富的自定义选项。用户可以根据自己的喜好设置字体、主题、布局等,使得编辑界面更符合个人阅读习惯。而且,typora.7z 还支持导出为多种格式,如PDF、HTML、图片等,方便用户在不同场景下使用和分享笔记。 最后,typora.7z 还具备云同步功能。用户可以将自己的笔记存储在云端,实现多设备之间的数据同步,方便用户随时随地查看和修改笔记,无需担心数据的丢失。 总之,typora.7z 是一款功能强大、操作简单的程序员笔记软件。它的所见即所得编辑界面、支持多种格式和语法、提供自定义选项和云同步功能,使得程序员能够更加方便、高效地记录和管理自己的代码和笔记。无论是在日常开发中,还是在技术分享和学习中,typora.7z 都是一个不可或缺的好帮手。 ### 回答2: Typora是一款设计简洁、功能强大的程序员笔记软件。它支持多种主题选择,包括黑暗模式,让用户可以自定义界面以适应不同的工作环境和个人喜好。与其他笔记软件相比,Typora的最大特点是采用所见即所得的编辑方式,用户可以直接在编辑文本的同时预览所产生的效果。这使得编辑笔记变得更加直观、高效。 Typora支持多种常用的文本编辑功能,如插入图片、表格、代码块等。它还支持LaTeX数学公式的编辑和渲染,方便用户在笔记中添加专业的数学公式。此外,Typora还内建了Markdown标记语言的支持,使用户能够借助简洁易懂的标记语言来编辑和格式化笔记。 Typora还提供了一系列便捷的功能,如自动补全、实时字数统计等,帮助用户提高工作效率。用户可以通过内建的全局搜索功能轻松查找到所需的笔记内容。并且,Typora支持将笔记导出为多种格式,如HTML、PDF等,方便用户在不同的场合下使用。 总的来说,Typora是一款非常实用的程序员笔记软件。它的所见即所得编辑方式和丰富的功能让程序员可以更方便地记录和管理工作中的笔记。无论是写代码、学习笔记还是个人随笔,Typora都能满足用户的需求。无论你是初学者还是资深程序员,Typora都值得一试。 ### 回答3: Typora是一款功能强大的程序员笔记软件,它以其简洁、高效和易用的特点受到了广大程序员的喜爱。 首先,Typora的界面简洁清爽,没有繁琐的功能按钮和复杂的布局,用户可以专注于写作和笔记,而不会被繁杂的界面干扰。它采用所见即所得的编辑模式,即用户在编辑窗口中所看到的就是最终的展示效果,无需频繁切换编辑和预览界面。 其次,Typora支持多种编程语言的语法高亮,在编写程序代码时能够清晰地突出显示关键词和语法结构,让代码更加易读易懂。此外,Typora还支持数学公式的编辑和渲染,可以方便地插入数学符号和公式,适用于编写技术文档、学术论文等需要使用数学公式的场景。 另外,Typora还具备一些便捷的编辑和排版功能,例如自动补全括号、手势操作、实时预览、导出多种格式等。使用Typora可以通过简单的快捷键或手势操作实现文档的快速编辑和格式调整,提高了写作效率。 最后,Typora支持各种主流平台,包括Windows、Mac和Linux,用户可以在不同操作系统上无缝切换使用。此外,Typora还可以与其他云端存储服务(如GitHub、Dropbox)进行集成,方便用户进行数据备份和共享。 总之,Typora作为一款优秀的程序员笔记软件,以其简洁、高效和易用的特点,满足了程序员在编写笔记和技术文档时的各种需求,为程序员提供了一个舒适的写作环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值