`
free_bird816
  • 浏览: 208998 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

一个优秀开发者如何才能变得伟大?---转

 
阅读更多

一个优秀开发者如何才能变得伟大?

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

从第一步到第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

分享到:
评论

相关推荐

    初中作文-励志篇:激励人一生的经典话语.docx

    48. **想象与现实** - 想象中的困难在行动面前变得微不足道,勇敢行动克服技术难题。 49. **软弱与男子汉** - 不轻易沮丧,展现坚韧精神,这对于IT项目的领导者尤为重要。 50. **困难与行动** - 行动能揭示问题的...

    3D游戏编程入门经典.docx

    作者强调,一个优秀的游戏开发者不仅要具备技术才能,还需要热爱游戏,因为热爱是创造伟大游戏的关键动力。对于新手来说,创建一个展示个人能力的样片(demo reel)是进入行业的敲门砖,这本书将指导读者完成这样的...

    the tao of programming

    如果“道”伟大,则操作系统、编译器以及应用程序都会变得伟大,从而实现用户满意和世界和谐。 - **启示**:程序员应当追求程序的内在美,而不仅仅是功能上的实现。理解“道”,意味着理解程序设计的本质和终极目标...

    TCL-TK A Developer's Guide

    TCL/Tk 是 TCL 的一个扩展包,提供了创建图形用户界面(GUI)的能力。TCL/TK 的结合使得开发人员能够快速创建功能丰富且直观的应用程序,而无需投入大量的时间和资源。TCL/TK 的优势在于其简洁的语法、强大的文本...

    基于springboot的洗衣店订单管理系统源码数据库.doc

    - **MyBatis**:是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。 - **MySQL**:关系型数据库管理系统,用于存储洗衣店的相关数据,如用户信息、订单详情等。 2. **前端技术栈**: - **Vue.js*...

    在线图书管理系统外文文献原文及译文.doc

    一旦语言被广泛应用,与现有代码的兼容性问题就会变得棘手。 尽管Java有一些语言特性非常出色,如面向对象、垃圾回收机制、跨平台等,但在后续版本中,为了保持向后兼容,新添加的语言特性可能不如最初的那样优雅。...

    基于springboot的疫情打卡健康评测系统源码数据库.doc

    在当前疫情防控常态化的背景下,对于学校等大型聚集性场所而言,如何有效地进行健康管理和疫情信息的采集变得尤为重要。传统的纸质文档记录方式不仅效率低下,而且存在容易损坏、丢失等问题,更重要的是,当数据量...

    基于ssm+vue公司人力资源管理系统.zip

    SpringBoot简化了微服务的开发,使得部署和运行变得更加简单。在这个系统中,SpringBoot将承担起服务启动、配置、监控等任务。 最后,微信小程序是腾讯推出的一种新的移动互联网入口,它无需下载安装即可使用,为...

    基于ssm+vue金旗帜文化培训学校网站.zip

    通过Vue Router进行路由管理,实现页面间的平滑跳转,而Vuex则作为状态管理工具,集中管理全局状态,使得数据在组件间共享变得简单。 再者,微信小程序的引入,扩展了该项目的移动端覆盖范围。利用微信小程序的API...

    基于SSM+vue的个人事务管理系统.zip

    一个优秀的个人事务管理系统能够帮助我们有效地规划时间、跟踪任务进度,从而提高生活和工作的效率。本文将详细介绍一个基于SSM(Spring、SpringMVC、MyBatis)框架和Vue.js前端技术构建的个人事务管理系统。 SSM...

    基于springboot的教师工作量管理系统源码数据库.doc

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以非常简单的将接口和Java的POJOs(Plain Old Java Objects,普通的Java...

    Confucius Framework-开源

    《孔子框架——开源精神在J2EE开发中的实践》 孔子框架,以其独特的命名,源自中国古代伟大的思想家...对于任何寻求高效、灵活和易于维护的企业级解决方案的开发者来说,孔子框架无疑是一个值得探索和采纳的优秀选择。

    greatest-book:Gitbook演示

    《最伟大的书——Gitbook演示》 ...无论是个人知识整理,还是团队协作编写,Gitbook都是一个优秀的工具选择。掌握Gitbook的使用,不仅可以提升你的文档编写效率,还能让你的作品呈现出专业且易于阅读的风格。

    基于ssm+vue的汽车站车辆运管系统.zip

    《基于SSM+Vue的汽车站车辆运管系统解析》 在现代信息技术的推动下,汽车站车辆运营管理系统...对于学习和研究者,这个项目提供了一个实际应用SSM和Vue的优秀示例,对于业界,它展示了现代交通管理系统的创新实践。

    基于ssm缪斯乐器购物网站.zip

    3. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。在缪斯乐器购物网站中,MyBatis负责与数据库交互,通过...

    基于ssm+vue酒吧存酒系统.zip

    MyBatis作为SSM中的持久层框架,它是一个优秀的SQL映射框架,可以将数据库操作与业务逻辑解耦。MyBatis通过XML或注解的方式,将SQL语句与Java代码分离,使得SQL的编写和维护变得更加直观灵活。同时,MyBatis支持动态...

    Netty 17道面试题和答案.docx

    2. 简单而强大的线程模型:Netty 的事件循环(EventLoop)设计使得线程管理和并发处理变得更加简单。 3. 编解码器:内置的编解码器解决了网络通信中常见的粘包和拆包问题,提高了开发效率。 4. 协议支持:Netty 针对...

    基于ssm疫情期间学生信息管理平台.zip

    3. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将...

Global site tag (gtag.js) - Google Analytics