编程成就:开发人员如何升级

4
程序员 数据库 Github C/C++ Go 9880 次浏览
一个优秀开发者如何才能变得伟大?

  还是先不想如何变得伟大:一个不错的开发者如何变成一个优秀的开发者?

  从第一步到第N步并没有确定的路径,哎呀,甚至不知道第N步是什么. 能逻辑思考的都明白,缺乏一个确定的路线意味着,想从新手到大师,将会是一个艰辛的旅程。在过去几年间,我还是花了相当一些时间,反复思考这一个难题。接 下来是什么?我该如何做才能从一个优秀的开发者成为一个相当优秀的开发者?

  成功到底是什么样子的?

  当我有一个清晰的目标以及一个可以衡量的成功标准的时候,我做的最好。比如,我想5分钟跑一英里,这很好衡量,而且成功是明确定义了的。我知道 现在我一英里我可以跑多快,而且网上到处都是如何跑快的建议和训练项目。我可以选择一种训练项目,努力训练,我非常自信最后能够达到我所期待的目标。而且 这个非常容易被衡量,每一周我都可以知道我距离自己的终极目标还有多少.

  但是,你如何去衡量自己是否达到了一个“相当优秀的开发者”这样一个级别呢?简单得讲,你不能够。这个目标,如上所述,非常的主观,非常的宽泛,简直是无法衡量的。所以,我们该如何定义一个可以衡量的东西?

  和想5分钟跑一英里差不多,我们可以从对比现在作为程序员的自己和所期望能成为的程序员来入手。五分钟一英里的赛跑者有而十分钟一英里的赛跑者缺乏的经历是什么?让大师级程序员获益而新手程序员缺乏的经历是什么?这里关键的是经历。

  我们都曾有过某种特定的经历提升了我们作为程序员的技能。我们曾学习过一种新的语言,而让我们有一种新的思维方式。或者,我们都曾精雕细琢过完 美的设计,只是为了观察其在苛刻的现实环境下暴露出的缺陷. 我们因此变成更好的程序员。所以,有些经历给了你新的技术。而有些则是不同的模式,并且能够让你理解为什么会这样。正是这些经历在教你,影响你的思维过 程,,影响你解决问题的方法,改进你的设计。方便的是,你是否有过某种特定的经历是很容易被衡量的。(如果把这些经历想成是成就就很有意思啦。)

  虽然花了些时间,但是我已经对我那不可衡量悬而未绝的目标,达到“相当优秀的开发者”的级别,感到不烦恼了。如果一个开发者能够以他的经历来区分,也许我们已经有了一个明确定义的路径朝向“相当优秀的开发者”这么一个大方向了。我揣测这么一条路径,应该是这样子的:

    1、标志着从一个普通人成长成程序员的经历    

    2、选择某种经历去追求    

    3、追去的经历完成了。(成就解锁了!)    

    4、经历的反思,深入的思考。[A]    

    5、返回第2步,这次是选择一个新的经历。

  如何以一种更好方式开始第一步,而不是众包给各位。这里我给出了一部分编程的成就,松散的分了组。[B]我会在文末为你提供多种方式,让你来创造你自己的想法。

  成就

  学习多种编程范式:    

  用汇编语言写一个程序    

  用函数式编程语言写一个应用            

  用面向对象语言写一个应用    

  用基于原型的语言写一个应用   

  用逻辑编程语言写一个应用    

  用 Actor 模型写一个应用    

  用 Forth 语言写一个应用[C]

  体验不同平台上编程的来龙去脉:    

  写过一个普通的 Web 应用    

  写过一个普通的桌面应用    

  写过一个普通的手机应用   

  写过一个普通的嵌入式应用   

  写过一个实时系统

  增强你对开发人员所常用的模块的理解:    

  写过一个网络客户端(HTTP, FTP 等)    

  写过一个设备驱动    

  写过一个B-tree 数据库    

  包装现有的一个库,以提供更好(更愉快)的用户体验    

  编写一个应用程序或框架,提供插件模型    

  写过测试框架    

  写过编程语言

  让自己知道 koans, katas, 以及岁月的智慧:    

  完成过五个 code katas      

  对你想学习的一个语言,完成 programming koans    

  参加一次 coderetreat    

  阅读 SICP 并完成所有练习

  开源编程:    

  为一个开源项目共享代码    

  补丁被接受    

  在一个重要的开源项目中得到提交权限    

  发布一个开源项目    

  对一个开源项目实施 Refactotum

  通过教授别人来学习[D]:    

  发表一次启迪性的讲话    

  在一个本地用户组中演讲    

  在一个会议中演讲    

  教授一次培训课程    

  发布一个教程    

  发布一个开源项目的 constructive code review    

  写一本编程的书

  关于成就

  现在,让我们来继续探讨一会儿。注意每一个成就都是可以衡量的。每一个都是一个布尔值:你完成或者没有完成。例如,很难衡量你是否学过一个函数 式编程语言,但是却可以轻易的知道你是否用函数式编程语言写过一个程序。后者是客观察、可测量、布尔的。这种可衡量性意图适用所有这些成就。

  需要承认的是,这种可衡量性并不完美。比如在一个会议演讲这个成就:你完全可以做到一般称职的时候就说你赢得了这份成就。但是如果你正在读这篇文字,我假设你是想要变得卓越。你知道只是为了把一项从清单中划掉而号称做到是非常逊的。

  既然我们谈到了改进

  既然我们谈到了改进,你会如何改进这个清单呢?

  这个清单现在在 github 上作为一个 gist,你可以任意的 fork 它然后添加更多的成就(确保你加的成就是可以衡量的)。或者 fork 它然后标记那些你已经征服了的成就。你还可以标记你正在做的一项,(例如,你可以去看看这些 forks :Justin Blake, Pierre Chapuis, Yann Esposito. )

  或者发表评论:什么经历将你塑造成一个更好的开发者?以及你会接下来去解锁哪一个成就?

  注释

  [A] 我无法充分的强调第4步。为了获得几乎每个成就,你应该停顿和反思这些经历,然后再移动到下一个。反思。问问自己,你学到什么,花些时间来写下这些想法。更好的是,与别人分享,并且对比其他人也已经获得这一成就的人,看看你的学习收获的如何。    

  [B] 可以去 coderwall.com 看看基于成就的模型这些方面的,很有意思。.    

  [C] Forth 基本上是自己的范式    

  [D] 突然想到了这句: “寓学于教” — Paulo Freire

请尽量让自己的答案能够对别人有帮助

10个答案

默认排序 按投票排序
0
不错的文档,值得学习下
0
学习学习
0
嘿嘿 不错 学习起来 嘿嘿
0
帮公司长期招聘以下职位,有意者可将简历Email至:lcassie@163.com.
公司福利好,年底有奖金,有五险一金以外的商业保险,外加子女险,加班可调休,有良好的培训及提升的机会!

JAVA工程师
要求:    
1.一年以上JAVA开发经验,熟悉软件开发流程;
2.精通JAVA语言,精通Struts、Hibernate、和Hibernate3.0开发;
3.熟练掌握SQL语法,精通Oracle等主流数据库相关技术及工具;
4.熟悉WebLogic/Tomcat等主流J2EE应用服务器,熟悉linux等服务器的配置
5.具备一定的系统设计能力需求分析能力,能完成相关技术文档编写;
6.具备较好的沟通协调能力、工作认真,能承受一定工作压力,有较强团队意识。

高级JAVA工程师
要求    
1.计算机或相关专业本科学历,重点大学本科以上学历优先,2年以上工作经验,1年以上J2EE应用开发经验;
2.至少参加过一个以上的大型软件项目的设计和开发;
3.深刻理解计算机原理,擅长进行模块设计、接口设计、代码开发;
4.精通面向对象设计方法和设计模式,逻辑能力佳,熟悉Rational Rose、UML设计工具;
5.理解J2EE系统架构,具有大型基于J2EE体系结构的设计和开发经验;
6.精通jQuery/spring/iBATIS应用框架;
7.熟悉eclipse开发工具及插件配置;
8.熟练掌握Oracle/mysql主流数据库应用,有一定的数据库设计经验;
9.熟悉WEB SERVICE开发;
10.熟悉tomcat、weblogic软件。


Java普通开发工程师
要求    
1.2年以上JAVA开发经验;
2.熟悉EXTJS、spring MVC、iBatis开发技术;
3.熟练使用spring+structs+hibernate等框架开发;
4.熟练tomcat服务器配置和使用.

Java高级开发工程师
要求    
1.有丰富的JAVA开发经验;
2.能独立完成复杂逻辑关系数据库的设计与开发;
3.熟悉EXTJS、spring MVC、iBatis开发技术;
4.熟练使用spring+structs+hibernate等框架开发;
5.熟练tomcat服务器配置和使用.

java架构师
要求    
1.至少有1-2个大型系统架构设计经验,有异构系统集成经验尤佳;
2.精通JAVA编程,熟悉J2EE、SCA等技术规范;
3.精通Struts、Spings、Hibernate、ExtJS等;
4.抽象思维能力强,能熟练使用Rational Rose/PowerDesigner进行系统分析、设计;
5.表达能力强,能完整、准确阐述架构设计方案,并指导软件工程师开展工作;
6.熟悉WebLogic、WebSphere、JBoss/Tomcat等中间件;
7.熟悉Oracle、MSSQL、DB2等数据库。

Net Programmers .Net程序员
要求    
1.精通.NET编程技术,熟悉html、javascript,对JS技术有一定的研究;
2.大于1年以上.NET网站项目开发经验,有成功的开发案例;
3.精通sql server,及其性能优化,能独立设计高负荷的数据结构;
4.具备系统分析和设计能力,以及规范化、标准化的代码编写习惯;
5.有大型系统开发及设计经验、对SEO有一定的了解的优先考虑

C++软件工程师
要求    
1.熟悉C/C++;
2.对WIN32 API及界面开发有比较深的认识和应用经验;
3.熟悉TCP/IP socket通信;
4.对常用Windows控件的基本消息要有了解。

高级C/C++工程师
要求    
1.计算机或相关专业本科及其以上学历,三年以上C/C++/VC++/Linux C开发经验;
2.两年以上Socket编程,对Internet通讯有较深入的了解,熟悉IOCP和多线程处理;
3.熟悉P2P原理,熟悉KAD协议原理;
4.熟悉网络视频传输协议、视频文件格式,有从事过流媒体相关项目经验优先;
5.有良好的设计思路和编程习惯,熟悉软件开发流程,能够根据产品需求完成技术概要设计和详细设计;
6.独立开发和自我约束能力强、善于和他人沟通、工作认真负责、能够承受工作压力、具有团队合作精神;
7.英语良好,能流畅阅读计算机英语专业文献;

质量工程师
要求
1.计算机或通信相关专业毕业,本科以上学历,对软件过程规范、软件质量有较深理解;
2.有较强的识别问题能力;
3.具有创新思维,思维敏捷,热爱流程创新工作;
4.具备较强的沟通、组织协调能力,工作积极主动,有较强的学习能力。

0
我觉得写一个基础的可扩展的基础框架
0
nice
0
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
0
呵呵,步骤很多,lz分的很细致