- 我是一个线程(修订版)
- 我是一个 Java class
- Javascript:一个屌丝的逆袭
- Java : 一个帝国的诞生
- JSP 一个装配工的没落
- TCP/IP 之 大明王朝邮差
- TCP/IP 之大明内阁
- TCP/IP 之蓟辽督师
- CPU 阿甘
- CPU 阿甘之烦恼
- CPU 阿甘:函数调用的秘密
- 我是一个网卡
- 我是一个路由器
- 我是一个进程
- 我是一块硬盘(上)
- 我是一块硬盘(下)
- 我是一个键盘
- 张大胖的 socket
- 张大胖学递归
- 学习面向对象的令狐冲
- 张大胖学数据库
- 数据库村的旺财和小强
- 小李的数据库之旅(上)
- 小李的数据库之旅(下)
- 漫画:什么是机器学习?
- 那些烦人的同步和互斥问题
- IE 为什么把火狐和 Chrome 给打伤了?
- 对浏览器村的第二次采访
- 节约标兵 IE 的自述
- EMail 诞生记
- Email 诞生记(下)
- Http 历险记(上)
- Http 历险记(下)-- Struts 的秘密
- 动物王国的面向对象
- 冯·诺伊曼计算机的诞生
- Http Server : 一个差生的逆袭
- 张大胖的加法器
- 从 1 加到 100:一道简单的数学题挑战下你的大脑
- 编程语言
- Javascript:一个屌丝的逆袭
- 计算机语言之战
- 我和编程语言的爱恨情仇(上)
- 我和编程语言的爱恨情仇(下)
- Android 为什么选择了 Java
- iOS 为什么选择了 Object-C?
- Basic : 一个老兵的自述
- Node.js : 我只需要一个店小二
- 命令式编程 vs 声明式编程
- 编译还是解释?
- 程序人生
- “架构师"小赵
- 师兄说
- 师姐说
- 小王的架构师之路
- 小李的版本管理系统
- 小超穿越记
- 小李的 Build 之路(上)
- 小李的 Build 之路(下)
- 张大胖改 Bug
- 我的编程之路--大学趣事
- 码农小王的一天
- 小李在外企
- 张大胖的需求估算
- 从厨师到码农
- 聊一聊那些神一样的程序员们(上)
- 聊一聊那些神一样的程序员们(中)
- 聊一聊那些神一样的程序员们(下)
- 谁是互联网之父?
- 一个价值百万的创业教训
- 让自己与众不同 - 提升工作的价值
- 看看你的“易燃性”
- 从无聊的工作中寻找价值
- 什么样的学生适合报考计算机?
- 谈谈程序员的职业方向(上)
- 谈谈程序员的职业方向(中)
- 谈谈程序员的职业方向(下)
- 谈谈培训班的作用
- 码农需要知道的“潜规则”
- 学习编程的加速度
- 码农在工作中的必备能力
- 码农和英语
- 老司机经验
- 假如时光能够倒流, 我会这么学习 Java
- 假如我是计算机系老师
- 学会编程, 而不是学会 Java
- 从增删改查中突围
- 抽象:程序员必备的能力
- 懒就一个字
- 编程的自学方法
- 小王买房记
- 从一道面试题谈谈一线码农应该具备的基本素质
- 想写框架的看过来
- 苹果手机变砖头以后
- 如何快速的学习一门技术?
- 唯一不变的是变化: 谈谈微信应用号
- 什么是企业应用?
- 勿以浮沙筑高台
- 为什么敏捷开发难于成功?
- localhost vs 127.0.0.1
- GitHub/Stackoverflow 找工作时有什么用?
- 动词 or 名词 :这是一个问题
- 如何选择入行语言
- 有时候,沉默是金
- 零 Bug 的代码是怎么炼成的?
- 浮点数为什么不精确?
- 文章错误大全
- Open Source--不要为了开源而开源
- 一不留神,代码就腐化了
- 先做个“键盘侠”, 再来写程序
- 不加断点调试的程序员是好程序员
- 码农必备技能:烂代码的处理之道(上)
- 码农必备技能:烂代码的处理之道(下)
- 学习数据结构有用吗?
- 从现在开始,丰富你的简历
- 那些永不过时的书,你看过几本吗?
- 学好编程必备的一个品质你知道吗?
- 你最爱的 Java
- 搞懂了这几点,你就学会了 Web 编程
- Spring 的本质系列(1) -- 依赖注入
- Spring 本质系列(2)-AOP
- 三层架构和 MVC 那点事儿
- Java 帝国之拨云见日识回调
- 小张的 Duck Typing
- JDBC 的诞生
- JDBC 后传
- 一个不安分的 JDBC 驱动
- Java 帝国之 Java bean (上)
- Java 帝国之 Java bean(下)
- Java 帝国之函数式编程
- Java 帝国之函数式编程(下)
- 关于 Java 初学者需要知道的 10 件事
- JUnit 你不知道的那些事儿
- 圣诞礼物:Java EE 的历史
- Java EE 读书指南
- 给小白的 Java EE 指南
- 给小白的 Java EE 指南(2)
- 给小白的 Java EE 生存指南(3) : XML
- 给小白的 Java EE 生存指南(4) : 一只叫 Tom 的猫
- 给小白的 Java EE 指南(5) : AJAX
- 给小白的 Java EE 生存指南(6) :Java 反射
- 闲聊
- "饿了么"初体验
- 来自大脑的控诉
- 一个高中生是怎么玩自媒体的?
- 尝试 分答
- 到底应不应该上培训班?
- 自学编程中遇到问题怎么办?
- 据说 99%的初级程序员看完后都不迷茫了
- 一行代码引发的“血案”
- 对一个死锁问题的思考
- 通过外包进入名企
- 请开往十年前的今天
- 为什么自学中最好有个师傅指导一下?
- 这个网站值得你花时间投入
- 为什么你无法坚持自学编程?
码农在工作中的必备能力
要想成为一个优秀的码农, 要求具备的能力挺多的, 我这里根据我的经验, 列举几个我认为比较重要的。 1 养成计算机的思维方式。 计算机是个典型的只懂得顺序,循环,分支的笨蛋, 它遵循教条主义, 只按特定的指令办事。
但是人类世界的需求又是如此复杂,更要命的是需求是用自然语言描述的, 这就和计算机之间形成了一个巨大的鸿沟。
很明显,这个鸿沟需要苦逼的码农去填充。
码农得理解人类需求, 学会计算机的思考方式, 理解计算机的指令, 然后努力的把翻译工作做好。
例如: 经理给你一个模块的需求以后, 你得站在计算机的角度, 把它用现有的数据结构或者自定义数据结构, 再加上一般不那么复杂的算法,用计算机语言把它描述出来, 这是基本功, 和具体语言无关, 和框架无关。
这个思维习惯养不成, 做不了码农。
参见我之前写的文章《学会编程,而不是学会 Java 》 2 定位问题的能力 20 世纪初福特公司一台电机出了毛病,几乎整个车间都不能运转了,相关的生产工作也被迫停了下来。
公司调来大批检修工人反复检修,又请了许多专家来察看,可怎么也找不到问题出在哪儿,更谈不上维修了。福特公司的领导真是火冒三丈,别说停一天,就是停一分钟,对福特来讲也是巨大的经济损失。
这时有人提议去请著名的物理学家、电机专家斯坦门茨帮助,大家一听有理,急忙派专人把斯坦门茨请来。
斯坦门茨仔细检查了电机,然后用粉笔在电机外壳画了一条线,对工作人员说:“打开电机,在记号处把里面的线圈减少 16 圈。”人们照办了,令人惊异的是,故障竟然排除了!生产立刻恢复了!
福特公司经理问斯坦门茨要多少酬金,斯坦门茨说:“不多,只需要 1 万美元。”1 万美元?就只简简单单画了一条线!当时福特公司最著名的薪酬口号就是“月薪 5 美元”,这在当时是很高的工资待遇。 1 条线,1 万美元,一个普通职员 100 多年的收入总和!斯坦门茨看大家迷惑不解,转身开了个清单:画一条线,1 美元;知道在哪儿画线,9999 美元。
在软件开发领域, 也经常会遇到类似的情况: 软件出了 Bug , 大家花费了巨大的精力,日夜奋战,最后发现只是有个文件打开后忘记关闭了 。只需要一行代码就能修复!
所以能迅速定位问题的人才是牛人。
码农定位问题有这么几种办法, 一是查看错误日志,推断错误的可能, 这是最直观也是最直接的了。
只不过很多情况下, 真正的凶手并不在凶杀案的现场, 这时候就需要进行分析了, 可以一步一步的调试代码, 找到真凶, 也可以在代码中输出日志查看运行时行为, 但无论哪种方法都是费时费力。
更悲惨的是, 不少问题是生产环境出现的 ,根本没法调试。
好的码农能够把软件在脑海里建立一个运行的模型,设置输入输出, 仰起头在脑海里模拟运行一下, 很快就能找到问题所在。 参见文章《不加断点的程序员是好程序员 》 3 搜索的能力 一个人不可能掌握所有的知识, 在工作中遇到不懂的地方, 很多时候没法系统的学习, 还好我们有搜索这个利器可以使用。
可是有的人试了好多关键词都不能找到理想的内容。 而有的人几乎是一击而中, 无往而不利。
这背后就是对问题本质的理解是否到位。
学会选择最合适的关键字进行搜索, 也是码农很重要的能力,多多练习吧。 4 熟练使用 IDE 的能力 我不反对直接使用记事本等文本编辑器进行编程, 我只想说熟练使用 IDE,能极大的提高编程的效率。 别的不说, Eclipse IDE 至少提供这些功能: 智能提示: 语法上的任何错误都立刻给你显示出来。 自动补全: 可以省去敲入很多代码 格式化:瞬间让代码好看很多 代码浏览: 轻松的打开一个类, 查看类的继承体系, 方法的调用层次 重构: 对付脏代码的绝对大杀器。 文本编辑器是绝对没有的。
所以想编程如飞的话,还是赶快搞定一个 IDE 吧。 5 重构代码的能力 优雅的设计和漂亮的代码不是一下子就设计出来 、编写出来的。
而是在一次次的迭代, 一次次的重构下慢慢的浮现的。
所以重构就显得非常重要, 如果你没有掌握这个技能, 赶紧去看看 Martin Flower 的那本经典的书吧:《重构:改善既有代码的设计》 6 写测试的能力 这里说的测试主要是 单元测试 , 这一部分的工作是由程序员,而不是测试人员完成的。
写单元测试主要是保证自己写的业务模块是按照预期来工作的。
此外,这些测试也会成为一种“文档”,用来描述软件的行为, 永不过时。
更重要的是,这些测试将会成为负责任的哨兵: 将来你改动代码的时候, 运行这些测试将会告诉你是不是对原来的逻辑造成的损害,这种回归测试的功能是价值无限的。 7 熟练使用 SCM 的能力 SCM :即源代码管理系统, 例如 SVN, Git, CVS 等。
现在的软件开发都是团队合作, 甚至是分布式合作, 所以一个 SCM 系统几乎是团队的必备。
日常的工作都是从 SCM 中 check out 代码开始, 所以熟练掌握至少一个 SCM 是码农的基本能力, 如果还不会的话, 赶紧到 github 上开个免费账号,学习一下吧。 8 构建软件的能力 构建软件就是把代码从 SCM 中下载下来, 编译、测试 、打包、部署到测试环境或者生产环境。
这个过程如果是手工的, 那就太无趣了。
这个过程当然应该是自动化的,码农至少应该学会像 Ant, Maven 这样的工具和像 Jekins 这样的平台, 帮助我们完成软件的构建。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论