程序员的自我修养
如果每天和代码相处的你真心觉得自己很苦逼,那么你应该考虑考虑自己是否适合这个职业了.如果不是出于热爱,这真的是一份难以坚持的工作.飞速更新的知识会让你一不留神就被行业甩在身后.
在我看来,合格的程序员至少应该具备以下三种修养:
- 第一、不断学习、提升技能的意识
真实世界中的程序员们, 不仅不是段子中邋遢、死宅、不懂风情、加班无止境的屌丝,(那些大都是人家富于娱乐精神的自黑,只不过说得多了大家便信以为真).我眼中的程序员群体是一群积极、善于学习、追求进步(偶尔还是有些闷骚)的卓越青年。
因为他们知道,没有一个技能可以让你一劳永逸,大部分的人都保持着对技术的敬畏之心,学习更新的技术,学习牛人的思想,学习先进的框架,从而追求更简洁的代码,更优美的实现,更健壮的架构。他们相信无论是自己还是还是自己的程序,永远还有优化的空间。而且你会发现越接近大神的人越表现出谦逊的态度和学习的积极性。站在山顶的人会觉得个人的渺小,学到越多的东西越觉得自己的无知,这就是程序员的境界。
- 第二、坚持锻炼、强健身体的自觉性
相对于其他工作, 这一点对于程序员们来说更为重要.
我们的工作面对电脑的时间长于一般的工作, 有时候入了迷可能几个小时动都不动.当时可能没有察觉,长此以往便会则腰酸背痛、容易疲劳, 重则腿部浮肿、臀部变形、身体素质大打折扣.
运动是最好的保养品,不管是什么样的职业, 坚持运动会让你在事业的道路上跑得更轻松更愉快更长久.经常运动的人在工作的时候会更专注,而且工作起来不容易感到疲劳,这点我有切身的体会. 很多行业内的名人都在坚持每天运动, 他们的成功和抗压力的能力与运动不无关系.不管是为了健美,还是为了身体不垮,你都应该动起来.搞不好一个不小心练出一身腹肌, 妹子也会随之而来.
- 第三、较好的语言表达能力
我想说的语言表达能力不是指个人的口才或者演讲的能力,而是指作为程序员解答问题和提出问题的能力, 进一步延伸便是与其他同行交流的能力.
解答问题的能力就是在别人向你求助的时候,你可以快速地知悉对方的疑惑点,懂得如何用最简单明了的方式解答对方的疑问.
而懂得如何提问则有着更高的技术含量.
一般来说, 在问问题的时候比较容易犯两种类型的错误.
-
第一种 提的问题太宽泛.
文件上传不成功是什么原因? 放到某地的imageView怎么显示不出来?为什么我使用XX框架做XX事情有时可以成功有时不可以成功...
这些让人蛋疼的问题会让被提问者在回答你的问题之前先花上好多时间来搞清楚你想问的到底是什么,浪费彼此的时间和生命. -
第二种 在已经跑偏的道路上提问细节.
小明同学在做的功能中需要将服务器返回的数据进行处理.服务器返回是NSData类型的数据,小明通过将NSData转化成NSString打印出来发现返回数据是正常的:{"username":"xiaoming","tel":"152"}
.
然后小明犯难了,我要怎样取到这里面的用户名并存储下来呢?小明之前听说有个叫正则表达式的东西好像就是做这种事情的,这次试着用一下还有机会装装13.于是他向公司的大神请教正则表达式的用法.大神看小明很爱学习,变拿出了自己珍藏多年的<正则宝典>送给小明.小明对着宝典研究了一天也没研究出怎么解决他的问题.于是他打算放弃正则这条路,开始研究怎样截取字符串.然后他又向大神提供了一系列关于字符串处理的问题.
大神感觉今天的小明问的问题不太正常,便顺嘴问了一下他在做神马.结果发现小明只是想解析json数据而已,大神哭笑不得.
这是我杜撰的一个情景,很多人包括我自己一开始都容易犯这样的错误:在已经跑偏的道路上钻细节.所以我会建议在向不了解你项目的人提问之前可以先大概说下你想实现的功能是什么样的.
此外还有一些典型,在论坛提问的时候由为常见.比如直接贴了几百行代码问有什么问题的; 比如直接丢了两个截图问为什么这样的...等等.
我觉得一次比较合理的提问应该让被提问者接收到以下信息:
-
你在做一个什么样的功能,期望的效果是什么样的.(简明扼要,一两句话概括)
远程提问时候这点尤为重要,可以把被提问者迅速带入到问题中来.此外还可以避免上面提到的问题跑偏的情况.
-
现在出现了什么样的问题.
如果是当面问问题,可以将程序运行起来展示问题所在;如果是远程问问题或者在论坛上面问问题,必要的情况可以选一张能够表明情况的图片(如报错信息的截图或程序正常和不正常情况下的对比图片)并做适当标注.
-
你做了什么样的尝试
这个信息有助于被提问者排查问题原因.
-
关键代码或者实现思路
如果能定位到是某段代码的问题,你可以指出代码位置,如果远程或者论坛上可以复制一段关键代码.切记一定是关键代码
,几百行几千行地往上贴那就只能呵呵了.
如果涉及的代码范围比较广,可以大致描述下实现此功能的思路.然后载关键的地方展示一些代码就可以让被提问者以最快的速度帮你定位问题.
当然这些信息要根据你与被提问者的关系,问题的复杂程度等因素进行增加或者减少.
如果是和你一个项目组的同事,就可以直奔主题说问题; 如果是求助网友,可能需要先让他了解功能大致情况.如果是比较大的功能模块(如后台下载)可以介绍思路,如果你只是想问label文字如何居中还先把项目介绍一遍那仍然是在浪费别人生命.
前面提到其他同行交流的能力, 包括但不局限于程序员之间的交流,还涉及到程序员与产品经理、项目负责人之间的交流,有时候可能还会有和用户之间的交流.程序员不应该是一个独立的个体,沟通交流的过程就可以看到自己的提升.
所以,噪起来吧.