一个合格的软件开发者所应拥有的

日常工作必备技能: 这些东西是不是每天都用用到呢

  • Unix/Linux Shell:如果用Unix/Linux系统,必须要学会Shell,目的是写一些自动化脚本,看看《Productive Programmer》和《Pragmatic Programmer》,其实很多事情不用手动去做,电脑会帮我们无差错的完成,一次又一次毫无怨言,人可没这么好。
  • Windows BATCH:必然会用到Windows系统,批处理文件(BATCH)还是很强大的,用于自动化再好不过了。
  • Unix/Linux常用命令: 文件操作,环境变量,find, grep, xargs
  • Regular Expression(网上有文章“编程不识正则表达式,不如回家种红薯”)
  • Vim或Emacs:这是真正程序员应该用的编辑器
  • Perl或Sed或Awk:这些脚本是处理文本的大杀器,另外脚本来完成些小工具或是小任务也是很方便快捷的。

通用的编程技术:这些都是核心的技术,一直不变,新兴的技术多是基于其上发展起来的,或是参考其模型,换了个面孔而已

  • HTTP
  • Socket
  • HTML+CSS+JavaScript
  • WEB+SQL
  • Unix/Linux开发:I/O(ioctl, read, write, select, poll), IPC(message queue, semaphore, shared memory), process(fork, exec)
  • Concurrent多线程并发(Lock, Mutex, synchronize, asynchronous task, dead lock)
  • Data structure and algorithms: (sort, search, tree, stack, queue etc)

社交活动:兴趣主导,just for fun。可以学习新知识,结识朋友,邂逅牛人

  • 在业余时间编程:可以学习新知识,可以只做自己喜欢的,因为这是个人时间,这是个人项目不喜欢的全走开!
  • 参与社区和论坛(线上,线下):学习新知识,结识朋友,拓展圈子,邂逅牛人
  • 参与开源项目:实现社会价值,回馈社会,把知识转化为价值,虽然工作也是,但通常人们工作只为了薪水。也能学习新知,做自己喜欢的,更可以结识牛人,朋友,提升自己。
  • 写技术博客:记录自己的成长历程,积累和经验,分享和帮助其他人,写博客是有百益而无一害。
人生态度决定一切!忙,没时间只是逃避这些事的借口。态度决定一切,很多说自己爱学习,爱编程,喜欢接触新东西(这些话谁都 会说,因为已经变成套话了),但是在业余时间却都是泡妹妹,看电影,上网,打游戏,上述的事情从来没做过,鬼才相信你爱学习,鬼才相信你上进,鬼才相信你热爱编程。虽然上述事情 不能证明你爱学习,爱编程,但是可以证明是由兴趣驱动,是发自内心的,因为你不是为了薪水而去做,所以至少,它是爱学习,爱接触新东西,热爱编程的一种体现。

看看这个:技术人员为什么应该参加社区活动

开发方法

  • 传统方式Waterfall模式
  • XP
  • Agile
  • TDD
现在有点全民皆敏捷,似乎人们都跑步进入敏捷时代了,但其实很多公司仍然套用着Waterfall的工作方式,其实是混合着搞,不完全的Waterfall,又掺进了敏捷的“先进思想”。可能开发会先写测试,再写代码,但是还是要先有一个设计和需求的过程,后面还会有QA验证测试。这主要取决于公司的管理方式和团队的选择,更要看团队和每个人的执行能力。

理想的工作环境

  • 有一个高性能的PC,有二个显示器,有流畅的网络,有舒适的椅子:电脑很卡的话,不但影响效率,更影响程序员的心情,会导致效率大幅下降,质量严重下降。
  • 有免费零食和饮料和咖啡:现在能按时吃饭的人很少,所以能有免费的零食再好不过了
  • 每个人都有一部分机,有内部IM:沟通之必须
  • 有丰富的图书:读书是提高 员工素质的好途径
  • 有休息室(里面有舒适的床或沙发):人难免会累,最好有舒适的沙发,可以躺一会儿。
  • 有健身房:编程是脑力劳动,至少身体没怎么动,久座更会影响健康,引起疾病。所以到健身房去练一会儿会放松大脑,回来后就没准有了灵感。经常锻炼会让员工身体更健康,减少电脑引起的疾病。
  • 有娱乐设备(Xbox,桌球,飞镖盘,Golf等等):久座和总盯着屏幕,不但会降低效率,失去思路,更会引发身体不适甚至疾病。起来玩一玩桌球,玩玩飞镖,或是Golf,甚至打会Xbox都会让人放松大脑,活动身体,会显著提升效率。

纵观国内的公司,能有这样待遇的员工太少了,至少我还没有见过或听过。只能望着国际大公司(Google)兴叹啊,甚至只能在梦中实现!

初级高级和专家的界定

初级 高级 专家
技术的应用 技术的内幕 技术的原理
How to use it how to implement it why it works
App with API implement API Frameworks Kernel, Theory
Read a book read latest specifications write a book, write specifications
Learn languages implements APIs invent languages

总体而言,合格的开发者应该能熟练的应用各种技术,编程语言和API,平台API;而高级应该是深入理解某种技术,实现其技术细节,实现API,实现系统架构,编写框架;专家应该是对技术的理论有深入的研究,是理论和技术的推动者,是系统内核的实现者,是规范的编写者,是语言的发明者。

用个尺度来衡量,在计算机领域,国内能称得上专家的几乎没有,高级的也比较少!

如何成长

Learn by Doing
Project after Project
选择刚好超出自己能力范围的项目,完成它,然后再总结。
面对一个完全未知的领域时,可以先上网查查相关的文章和官方文档,了解个大概,然后选择一个项目(这个有点困难,可以向有经验的人求助,网上搜索,或是到论坛,社区询问)。

看看这二篇文章:

跟着导师学
前面说到,学习一门新技术的最佳方式是做一个此门相关的项目,但是对于新手,选择什么样的项目,是很难的,所以如果有着一个先驱性的导师帮助就容易 的多,而且在实现项目过程中,也可以向导师反馈并且得到导师 的帮助。这对学习有很大的帮助。
跟着优秀的团队学习
个人的成长到一定程度会遇到瓶颈,这时就需要有一个良好的团队氛围和环境,因为有些东西只有身处于一个团队中才能学习到,比如与他人沟通,代码的整洁性,代码评审,等等独立开发者不容易做到这些,这时就需要与优秀的团队共处。

如何界定水平

这是很难的,现在流行的方式是什么熟悉,掌握,了解或专家啊,之类的,比如所有的招聘广告都写着:熟悉Java语言,精通C语言等等。
所以,可能了解,掌握熟悉之类似乎是界定水平的标志,学校里面也是用这些来界定(虽然是以成绩,但是教学大纲的要求就是了解,熟悉掌握之类的字眼)。
但是什么叫了解呢,什么叫熟悉呢,什么又叫精通呢?会写个HelloWorld算了解吗?看了一遍《Thinking in Java》后算熟悉还是算精通,能默写下来算熟悉吗,能背下来算精通吗?。这些词虽然听起来耳熟,但十分的抽象,难以量化,不同的人又有不同的理解。
同样初级高级和专家级等等也都 是很抽象,很模棱两可的概念,因此有人会疑惑“我是一个优秀的程序员”吗。
对于如何成长以及如何界定,有一篇文章(编程成就:开发人员如何升级)提出以成就来界定,比如能用Java写出一个小型的桌面应用,必然会对Java达到熟悉和理解的地步,再如实现一个简单的HTTP协议,实现一个简单的浏览器,实现一个简单的HTTP服务器,完成了这些你对HTTP协议必然会有深入的理解,而且非常的熟悉。如果你能写一本书,那肯定达到专家级别了。

同时,完成一个项目又是一个很好的学习方式,这种Learn by Doing被许多人所推崇,事实证明它也是最高效的学习方式。

思考与不断更新

这个世界是变化的,宇宙中没有永恒的东西,更没有一成不变的东西,变化是常态,所以就要不断的思考,思考如何才能做的更好,如何才能提高,如果停止了思考,也就停止了进步!也没有“SilverBullet”,唯有思考和不断更新,方能以不变应万变!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值