公司里的程序员
前几天看了一片讲数据科学家(Data Scientist)的工作的文章,算是解决了自己的很多的困惑,因为一直依赖都觉得数据科学家是个很神秘、很高深的工作,所以他们的工作是做些什么,也就不得而知了。
所以,可能在其他人的眼里,程序员同样是有些神秘(或者说,不知道程序员一天到晚都在干嘛还合适一点),这篇文章就算是一个科普,讲讲程序员的日常,当然本篇所涉及的内容应该不止于一天的工作,毕竟一天是包含不了各个类型的编程工作的,所以,重新定义一下日常的含义,并不是一天的常态1,而是时间的常态。
Programmer 是什么?
Programmer 也叫程序员,什么是程序员呢,就是那种写代码的人,如果不知道什么是代码,就是那种在电脑上的敲一些奇怪字符的人。我们现在所用用的软件都是由这些奇怪的字符组成的。
Programmer 都做什么?
在一般的互联网公司,程序员的工作可能包括(但不止于)下面几类:
- 完成新功能。在一个产品初期会占用大量时间,产品成熟以后都是小功能迭代,写代码的时间就会大量下降。
- 查问题/改bug。这个会占据平时工作大量的时间,时常有人来反馈说某某个地方不对,这时需要做的事就是:1.复现问题(如果可以重复出现) -> 2.登陆到其中一台服务器上去跟中相关片段的log -> 3.查看对应的代码片段去确认情况 -> 4.得出结论。 有结论之后,如果是自己的bug,则修复然后上线,如果依赖的其他的服务的bug,通知对方去修复bug,如果不是bug,更相关的同学说明情况。
- 开会/需求评审。这块也是很费时间的,开会包括各个需求进度的汇报例会。一个新需求来的时候,相关的开发人员(前端、Android/iOS、后台)一起评估实现难度、合理性,然后预估一个开发时间等等。
- 做一些技术优化。 这部分工作一般不在排期之类,直接在平时工作中、以及接手别人的工作的时候发现需要优化和提升的地方,自己找时间优化掉,这样也减少以后查问题的时间。
- 看内网上的技术文章。了解别人遇到的问题、踩过的坑、做出的解决方案。
Programmer 都有什么样的专业背景?
程序员这个职业,没有学历要求,不需要上岗证书,所以做程序员的,什么专业的都有,不过比例稍微占优势的,还是计算机、软件、电子相关专业的。虽然没有这些限制,但是入行之后的学习是所有人都需要的。如果是想不仅仅做一个代码搬运工,那么基础知识的掌握也是必须的,这一点计算机相关专业的就会占优势。因为这些知识计算机专业的在学校学过了,而其他专业的同学就需要自学来完成相同的课程。
怎样算一个优秀的Programmer ?
优秀可以分为技术上的优秀和业务上的优秀,技术可以通过学习来提高,业务就需要自己的主观意识了,多思考、多尝试去做到。
技术上,基础知识决定了发展的深度,并且这些基础都是有效期很长的知识,比如操作系统、网络(TCP/IP、HTTP等)、数据结构和算法;各个层次的语言都要会一个,SHELL、C语言、C++/Java、Python/Ruby/Perl/PHP,会这些在具体的工作中也会大大提高效率。数据库也是至少需要掌握一种,比如MySQL。
作为一个程序员,在做业务相关的需求的时候,不能是别人提什么需求就按部就班的完成,还需多思考为什么这么做,这个需求的合理性,在思考这些产品策略的同时,也会反作用到技术上,技术是为产品服务,也是更好适配需求。一味的执行往往并不能做好一个产品。
所以能同时在技术和产品上能做到这样,就能算一个优秀的程序员,基本也具备了自己的核心竞争力了。
Programmer 的薪资怎么样?
算了,不写这块了。
为什么Programmer 很重要?
重要程度,不言而喻,如果没有程序员实现各种各样的软件,可以想象一下没有软件生活是多么艰难。
虽然如此,但对一个产品来说,功能的实现仅仅是其中必不可少的一环,还有其他不可或缺的环节,一起运作才能有靠谱、好用的产品。
2016.04.03 14:14
Footnotes:
1 此处的日常就是指平时工作的意思,因为内容的种类和情况较多,一天并不能碰到全部的情况,所以很多事是分的比较散的。