如何成为一个打杂的程序员
随着软件开发的积累和发展,现在程序员几乎很难碰到那种非常大,非常艰难的问题了。比如写一个linux内核,独立设计TCP/IP,比如实现一套搜索引擎,整一套游戏引擎,做个图像优化算法。对于国内大部分程序员来说,是没办法没机遇碰到这种的,你所碰到的大部分问题都有现成答案,你只需要整合会用就OK了,然后需要去整体把握来解决业务问题,所以大部分人估计都只能当一个普普通通的程序员了,那么,我想我的些许经验也许有点用。大神请绕路~
我既不是计算机科班出身,也不是大公司出来,08年数学系毕业,进入一家私营企业待了快7年,幸好不是外包公司,有充分的时间学习尝试,我不是牛人,但我自问是个能解决大部分问题的人。
总的来说,我这7年大概这么分的:
08-10 3年左右时间,程序逻辑,业务沟通能力
11-12 2年时间,UI细节能力
13-14 这段比较杂,主要还是偏产品,设计,运维,团队管理,项目管理方向思考比较多
所以我算是机遇不错,干得比较杂,虽然原来对这个也是很烦躁,对整体性解决问题有点感觉。会c,c++,java,javascript,object-c,做过前端,后台,终端,APP。
我把程序员最重要的几部分列出:
- 系统理解:包括平台,语言,底层,中间件,前端,后台,网络通讯等
- 逻辑思维:包括代码分层,设计模式,整体架构,业务转程序的理解
- UI细节:对UI的敏锐,空间感的把握,绘图,控件的理解
- 解决问题的能力:学习能力,开发人员的思维习惯,程序员的沟通描述语言,搜索查找资料的能力,英语能力,主动思考咨询能力
我的逻辑思维比较强(单指程序员的思维,抽象思维一般般),学习能力也还一般,所以前面3年练习系统理解和逻辑思维其实对我难度不大,3年时间,从底层,中间件,UI,后台服务器,网络等都摸了个遍,各种设计模式,适配器,观察者,状态机,反应堆等都能基本熟练运用。比如,进公司3个月时间基本能对项目的整体架构有把握了,1年时间就敢拿着C++去写后台服务器了。但我认为,这方面也是能训练的,训练方式就是重构,不停重构你的代码,要让别人看你的代码函数名就能反馈出整个业务逻辑,分层逻辑,尤其是那种中枢式的模块,你需要控制进,控制出,控制调度,同步异步,堵塞,绝对不能乱。我在入职第一个月里第一个模块重构了3次,相当于完全搞了4遍。然后,多去理解设计模式,设计模式完全是对思维逻辑的训练,是程序员间的通用语。最后,多看别人代码,多参与开源项目,理解别人的开发思路也是一种打破自己固化思维的训练方式。
然后沟通方面,基本能听懂别人说话,虽然情商不高,但在开发团队中足够用了,主动性语言表达能力偏弱,不过说出来别人也能听懂。这方面也可以通过去看别人代码学习,你学会站在别人角度思考,就基本能好好沟通了。另外,设计模式,UML等也是一种沟通语言。
但平时也注意多和团队人员沟通,多和外部人员沟通,参加开发者线下会议,别闭塞。
UI细节其实是很惨的,对这方面一开始是很抗拒的,天生美感比较欠缺,一开始认为命令行是最好最酷的交互界面哈。
后来是逼着自己学的,比如空间感的把握,我是这么练习的,一开始拿尺子量,一个个像素对,后面大概拿手指量,粗量,最后就练习到能拿眼睛量大概了。这时你就有直觉了,拿了东西,粗略扫一眼,能看个大概哪里做的不好,差10几像素,哪里有点不对称,哪里有点不协调,然后看着就是会不顺眼。所以我觉得什么东西都是可以通过训练练习改变的。
像控件的理解,这方面全是经验积累,你放一个文本控件,就得考虑文字大小,颜色,字体,对齐,间距,边距,呃,这个文本是变长的,还得考虑文本长了能不能换行,溢出后是省略还是走马灯等等。放一个图片控件,就得考虑前景背景,考虑放大缩小拉伸变形问题。做动画,就得考虑开始,中间,结束,时间,帧速,异步,可控等问题。
对色彩的理解,一直还是个问题,这方面倒是可以依赖设计师就行。不过,提升自己的品味,多习惯用好的产品好的软件,如mac等能有效提升右脑在这方面的直觉。
至于解决问题的能力,学习是最重要的,擅长学习的人,解决问题都很强,我学习不算太强,虽然囫囵吞枣学了很多,也算能融会贯通,但是一直对学习这方面总结的比较少,缺乏科学系统的方法,最近才算有所悟,等成熟了再总结下。可以去看看李笑来,郝培强之类的学习方法。
但起码的动力我还是比较足的,比如碰到一个完全没听过的玩意,你要有动力去查找,去思考是什么,干什么,为什么,要去和已有的知识体系联系起来。
关于程序员的日志打印,好的程序员的日志,知道哪些关键点要打印,哪些没必要,基本碰到问题,拿日志看一眼就知道了。
而程序员的思维习惯,要学会透过现象看本质,出问题了,就得深入思考,先看看打印bug,大概分析分析,你是程序员,不是用户,不要问出为什么挂掉的傻x问题。基本,你能用程序员语言描述出问题,解决思路也就有了,比如这个地方为什么空指针?顺路一找就可以了。
搜索,起码得会google搜索吧,多在stackoverflow,github上混着,基本上你日常碰到的问题100%都是能找到答案,当然前提是你能正确的描述问题。
英语,读写文档,搜索问题时都是必备的,你甚至得学会用英语去描述问题来搜索。
最后,程序员必须明白,就算是打工,你也是在忙自己的事业,用心做好事情,同时不停提升自己,投资自己,成长才是你最大的财富。
也就是你得拿着卖白菜的工资,操着卖白粉的心~