日常工作必备技能: 这些东西是不是每天都用用到呢
- 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”,唯有思考和不断更新,方能以不变应万变!
分享到:
相关推荐
### 做一个合格软件工程师的基本素质 在当今数字化时代,软件工程师扮演着至关重要的角色。无论是企业级应用开发还是消费级产品设计,都需要具备高素质的软件工程师来推动技术进步和创新。那么,如何才能成为一名...
在Go语言的学习过程中,搭建一个合适的开发者环境是至关重要的第一步。本文将针对"Go初学者开发者工具搭建"这一主题,详细介绍如何配置一个高效且舒适的Go编程环境,主要涉及Goland IDE的安装、调试工具Delve的配置...
在压缩包内的“Demo_Upload”可能是一个演示程序,展示了如何使用SDK进行上传操作,例如将车辆信息、合格证数据等上传至管理系统。开发者可以通过分析和运行这个示例,理解如何调用SDK中的函数和方法,以及如何处理...
综上所述,《计算机软件使用许可合同》是一个全面保护软件开发者和使用者权益的法律文件。通过细化授权使用、使用范围、服务、保证、验收、责任免除、著作权保护、第三方软件使用、违约责任等多个方面的条款,合同为...
考虑到学习者群体的多样性,软件开发者特别注重了界面的友好性和操作的简便性。即使是没有编程基础的初学者,也能够通过简洁直观的用户界面快速上手。这种设计不仅降低了学习的门槛,还增强了学习者的使用体验,使...
随着信息技术的飞速发展,软件项目开发已成为商业活动...无论是对于软件开发者还是需求方,理解和遵守合同条款都是项目成功的关键。希望这份经典合同范本能够为更多需要进行软件项目开发的个人和企业提供有价值的参考。
通过这样的策划书,大学生软件大赛不仅是一个竞赛平台,更是一个整合教育资源、强化理论与实践结合、推动校企合作、提升学生就业竞争力的有效途径。大赛的成功举办将有利于培养出符合市场需求的IT专业人才,同时也为...
《软件使用许可协议》是规范软件开发者(甲方)与用户(乙方)之间关于软件使用权的法律文件。协议中明确了软件的权益归属、许可范围、使用限制、升级规则、版权保护、备份副本的规定以及责任限制等内容。 1. **...
通过以上内容的介绍,我们可以看出,一个详尽的国际软件许可合同将涉及到多方面的法律条款,它不仅保障了许可方的知识产权和经济收益,也保护了被许可方合法使用软件的权利,同时为可能出现的纠纷提供了处理的法律...
软件架构是指一个软件系统的结构框架,它定义了系统的组织结构、组件间的交互方式以及指导组件集成的原则。软件架构的重要性在于它能够帮助团队更好地理解和规划系统的整体结构,确保系统的可维护性、可扩展性和性能...
在版权方面,合同书强调乙方拥有软件的版权,而甲方仅获得在医院内部使用的权利,禁止任何形式的二次转让或非法解密行为,这保护了软件开发者的知识产权,同时防止了软件被滥用或未经授权的扩散。 技术指标是衡量...
本文将对“软件开发合同协议(软件可永久使用)”中的关键内容进行详细解读,旨在为甲乙双方提供一个完整、清晰的合作框架。 首先,项目定义作为合同协议的起点,清晰界定了甲乙双方的初步期望与任务范畴。在此合同...
以上内容是软件开发外包合同的核心要点,涉及到了软件定制开发的全过程,从合同签订、项目管理、费用结算、知识产权保护、售后服务等多个方面,对于IT项目经理、开发者和企业决策者都具有重要的参考价值。...
计算机软件著作权登记是保护软件创作者权益的重要步骤,它确保了软件开发者对其创作的软件拥有法律上的所有权。以下是对计算机软件著作权登记工作流程的详细说明: 首先,申请人在申请软件著作权登记时,必须以书面...
Java软件开发学校的选择是决定未来职业生涯的关键步骤,尤其是在成都这个以天府软件园为核心的地区,Java开发者的需求量巨大,但合格的人才却相对稀缺。对于想要投身于Java开发行业的学生而言,选择一所具备良好教育...
"山寨优化大师源码来看"这一项目正是这种精神的具体体现,它为对C#编程及软件优化感兴趣的开发者提供了一个宝贵的实践平台。 首先,让我们关注项目的开发背景。开发者在描述中提到,他用了两个月的时间精心打造了一...