2017就要结束了,再学点什么呢?

2017就要结束了,再学点什么呢?

陈天陈天

下周回京,打算做两场知乎 live。感兴趣的同学可以关注一下。


回归本源,软件开发中的那些基本概念

似乎自小学毕业以后,我们在数学课以外,就很少关注概念(concept)。概念是一切认知的基石 —— 很多时候,我们因为对概念的理解不清不楚,而无法抓住本质。软件开发中有很多你以为你理解了实际上你没有理解的概念,而我们在开发的路上走得太远,需要时不时回过头来重新梳理一下这些最基本的概念。柳总说:撒一层土,夯实,再撒一层。这是任何学习或者求知必经之路。

本次 live,我将抛砖引玉,从软件开发中最基本的四个概念:变量,值,函数,接口讲起,谈谈我们该如何理解这些概念,以及概念后面的编程思想。

大纲如下:

  • 什么是变量(variable)?为什么说变量是一个 indirection / separation?
  • 如何给变量取合适的名字?
  • 什么是变量的值(value)?变量所蕴含的信息,该用什么样的容器来承载?
  • 什么是函数(function)?pure / impure function 如何区分?如何将其应用在系统设计中?
  • 什么是接口(interface)?如何设计简单清晰的接口?

本 live 讲述部分约 60 - 75 分钟,答疑会有 30 分钟。

开讲时间:12月6日晚 7:00。

传送门:回归本源:软件开发中那些基本的概念


谈谈工程师常常忽视的软件开发能力

两周前我发了个招聘贴,讲到我们的广告系统用 scala 撰写。后台于是一下子涌来好多留言:啊啊啊你们为什么要用scala 开发广告系统?为什么不用 erlang?为什么不用 C++?scala 合适吗?编译那么慢?效率也不高?akka 还是偷师的 erlang/OTP?…

根据我过往的经验,我发现很多有趣的点:

  • 程序员容易陷入无所谓的对语言本身的争执上去
  • 两三年工作经验的工程师往往会遇到一个瓶颈 - 过于关注于某个语言和某种技术本身而忽视了系统层面的修为
  • 软件开发是一个系统性的工程,语言占比有多大?你写的代码的占比有多大?
  • 软件是为什么服务?business!你又了解多少和 business 有关的知识呢?

因而,我觉得有必要做一个 live,谈谈工程师常常忽视的软件开发能力。

我常常使用软件系统来描述软件,是因为解决商业问题的逻辑仅仅占据软件开发的一部分。日志,监控,安全,部署,性能,数据分析等一系列由开源软件或第三方工具构建的服务,加上商业逻辑的服务一起,运行在生产环境中,才是真正的软件。工程师提升代码的能力,仅仅是整个 big picture 中的一环。

此外,赚钱,在这个 picture 的诸多能力中,越靠近钱,或者越能够影响钱的能力,对公司的价值就越大。

所以,工程师除了要提升开发的能力外,还应该着力构建业务能力和系统能力。

我们先从软件系统的演进谈起,谈谈软件系统中的重要组成部分,然后聊聊工程师如何打造系统能力:它们和具体的功能无关 —— 如何使用各种工具和资源,建立一套体系,让软件能够正常运行和演进。这包括综合的软件开发和系统架构的能力,收集数据的能力,以及分析数据的能力,快速应对问题,进行决策和解决问题的能力,以及万金油 —— 什么都「略懂」的能力。

然后,谈谈商业知识和业务知识业务的业务获取,比如说,你需要了解你的公司公司如何赚钱?如何获取用户?每个用户身上花费多少(UAC),能够赚多少钱(LTV)? —— 这些知识,能够帮助你更好地撰写出有价值的软件,能够让你在价值链上越走越高。由于公司和公司的业务不同,在这里,我提出一些基础的概念,然后不断提出问题,不断引发你的思考,从而激发你问出更多的问题,并主动去寻找这些问题的答案,或者找到更好地解决方法。很多时候,问对问题,比寻找答案还要重要。

本 live 讲述部分约 60 - 75 分钟,答疑会有 30 分钟。

大纲如下:

  • 什么是软件系统?什么样的能力有助于构建软件系统?
  • 什么是系统能力?如何累积系统知识和经验?
  • 什么是业务知识?如何累积业务知识?
  • 总结:工程师如何提升个人在公司的价值?

开讲时间:12月13日晚 7:00

传送门:谈谈工程师常常忽视的软件开发能力

文章被以下专栏收录
还没有评论
推荐阅读