日常工作必备技能: 这些东西是不是每天都用用到呢
- Unix/Linux Shell:如果用Unix/Linux系统,必须要学会Shell,目的是写一些自动化脚本,看看《Productive Programmer》和《Pragmatic Programmer》,其实很多事情不用手动去做,电脑会帮我们无差错的完成,一次又一次毫无怨言,人可没这么好。
- Windows BATCH:必然会用到Windows系统,批处理文件(BATCH)还是很强大的,用于自动化再好不过了。
- Unix/Linux常用命令: 文件操作,环境变量,find, grep, xargs
- Regular Expression( 上有文章“编程不识正则表达式,不如回家种红薯”)
- 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都会让人放松大脑,活动身体,会显著提升效率。
初级高级和专家的界定
初级 高级 专家
技术的应用 技术的内幕 技术的原理
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
选择刚好超出自己能力范围的项目,完成它,然后再总结。
面对一个完全未知的领域时,可以先上 查查相关的文章和官方文档,了解个大概,然后选择一个项目(这个有点困难,可以向有经验的人求助, 上搜索,或是到论坛, 区询问)。
看看这二篇文章:
- 程序员技术练级攻略
- Teach Yourself Programming in Ten Years
跟着导师学
前面说到,学习一门新技术的最佳方式是做一个此门相关的项目,但是对于新手,选择什么样的项目,是很难的,所以如果有着一个先驱性的导师帮助就容易 的多,而且在实现项目过程中,也可以向导师反馈并且得到导师 的帮助。这对学习有很大的帮助。
跟着优秀的团队学习
个人的成长到一定程度会遇到瓶颈,这时就需要有一个良好的团队氛围和环境,因为有些东西只有身处于一个团队中才能学习到,比如与他人沟通,代码的整洁性,代码评审,等等独立开发者不容易做到这些,这时就需要与优秀的团队共处。
如何界定水平
这是很难的,现在流行的方式是什么熟悉,掌握,了解或专家啊,之类的,比如所有的招聘广告都写着:熟悉Java语言,精通C语言等等。
所以,可能了解,掌握熟悉之类似乎是界定水平的标志,学校里面也是用这些来界定(虽然是以成绩,但是教学大纲的要求就是了解,熟悉掌握之类的字眼)。
但是什么叫了解呢,什么叫熟悉呢,什么又叫精通呢写个HelloWorld算了解吗了一遍《Thinking in Java》后算熟悉还是算精通,能默写下来算熟悉吗,能背下来算精通吗这些词虽然听起来耳熟,但十分的抽象,难以量化,不同的人又有不同的理解。
同样初级高级和专家级等等也都 是很抽象,很模棱两可的概念,因此有人会疑惑“我是一个优秀的程序员”吗。
对于如何成长以及如何界定,有一篇文章(编程成就:开发人员如何升级)提出以成就来界定,比如能用Java写出一个小型的桌面应用,必然会对Java达到熟悉和理解的地步,再如实现一个简单的HTTP协议,实现一个简单的浏览器,实现一个简单的HTTP服务器,完成了这些你对HTTP协议必然会有深入的理解,而且非常的熟悉。如果你能写一本书,那肯定达到专家级别了。
同时,完成一个项目又是一个很好的学习方式,这种Learn by Doing被许多人所推崇,事实证明它也是最高效的学习方式。
思考与不断更新
这个世界是变化的,宇宙中没有永恒的东西,更没有一成不变的东西,变化是常态,所以就要不断的思考,思考如何才能做的更好,如何才能提高,如果停止了思考,也就停止了进步!也没有“SilverBullet”,唯有思考和不断更新,方能以不变应万变!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!