关于程序员programmer职业生涯的思考

Programmer的本职工作:

  • 按时保质保量完成任务。
  • 妥善地解决所面临的问题。

Programmer职业特点:

  • 日常工作一定是需要创新的想法的。因为如果programmer的工作可以机械化的完成,那么鉴于工作成品的特点,这将很快用代码来机械化地解决,所以这部分工作就不需要雇佣programmer来做了。上述论断有一个漏洞,就是人可以机械化地解决问题A,但是很难用机器模拟人来解决问题A,那么就需要雇佣programmer来专门负责解决问题A。而如何用机器模拟人来解决问题A,一定是computer science领域的学术热点(如machine learning)。最能体现这个特点的学术热点是代码生成系统,即输入需求——输出代码,这样的一个End2End的系统,目前还处于研究阶段。
  • 由于代码生成系统还处于研究阶段,因此,掌握常见编程技巧,结合业务需求进行开发,是绝大多数programmer实际所面临的工作。这个过程其实还真不需要太多的创新。因为你只要按照计算机先驱们给规划好的道路去走就可以了。这应该是大部分programmer整个职业生涯主要且核心的工作。
  • 上面两个看似冲突的观点,实质是Computer Science专业的学生在工业界两类重要的工种,前者是研究岗,后者是开发岗

学术研究与软件开发之间的关系:

  • 重要的学术研究会导致工业界对programmer能力要求发生变化。(2010年左右神经网络的复苏导致工业界对AI人才的需求剧增)

我作为一个学术小虾米,在大学里只有极小的可能做出颠覆性的科研成果,更不要说在公司里每天超高的开发压力下了, 我在公司里做出创新的科研成果的可能性微乎其微。


所要解决的问题是什么?算法是如何解决这个问题的?从朴素的想法到当前的算法,经历了哪些优化的步骤,每一步的优化思路是什么?

对于生手来说,把一个业务问题用最普通的思想实现出来就已经是很困难的事情,更不要提优化了。理解业务逻辑

我们总会遇到一些感觉无从下手的问题,在这个时候,理解这个问题就成为当前首要任务。

programmer所承担的角色,就是把用户的需求转成可交付的software(app,backend的一个服务进程,网页,可执行程序等等)。

用户需求纷繁复杂多种多样,programmer如何安排自己学习路线,以便于逐步提高自己programming的能力。

学校所学的大型软件系统:操作系统(进程管理、内存管理、IO管理),编译器,数据库系统、TCPIP协议栈
常见的项目:P2P聊天室

上一篇:Android权限处理,终局之战


下一篇:android内存管理,Android-App的设计架构经验谈,Android知识总结