`
free_bird816
  • 浏览: 205869 次
  • 性别: 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

分享到:
评论

相关推荐

    iOS版微信抢红包Tweak.zip小程序

    iOS版微信抢红包Tweak.zip小程序

    毕业设计&课设_篮球爱好者网站,含前后台管理功能及多种篮球相关内容展示.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于springboot社区停车信息管理系统.zip

    基于springboot社区停车信息管理系统.zip

    基于springboot南皮站化验室管理系统源码数据库文档.zip

    基于springboot南皮站化验室管理系统源码数据库文档.zip

    重磅,更新!!!上市公司全要素生产率TFP数据及测算方法(OL、FE、LP、OP、GMM)(2000-2023年)

    ## 数据指标说明 全要素生产率(TFP)也可以称之为系统生产率。指生产单位(主要为企业)作为系统中的各个要素的综合生产率,以区别于要素生产率(如技术生产率)。测算公式为:全要素生产率=产出总量/全部资源投入量。 数据测算:包含OL、FE、LP、OP、GMM共五种TFP测算方法!数据结果包括excel和dta格式,其中重要指标包括证券代码,固定资产净额,营业总收入,营业收入,营业成本,销售费用,管理费用,财务费用,购建固定资产无形资产和其他长期资产支付的现金,支付给职工以及为职工支付的现金,员工人数,折旧摊销,行业代码,上市日期,AB股交叉码,退市日期,年末是否ST或PT等变量指标分析。文件包括计算方法说明及原始数据和代码。 数据名称:上市公司全要素生产率TFP数据及测算方法(OL、FE、LP、OP、GMM) 数据年份:2000-2023年 数据指标:证券代码、year、TFP_OLS、TFP_FE、TFP_LP1、TFP_OP、TFP_OPacf、TFP_GMM

    多种编程语言下算法实现资源汇总

    内容概要:本文详细总结了多种编程语言下常用的算法实现资源,涵盖Python、C++、Java等流行编程语言及其相关的开源平台、在线课程和权威书籍。对于每种语言而言,均提供了具体资源列表,包括开源项目、标准库支持、在线课程及专业书籍推荐。 适合人群:适用于所有希望深入研究并提高特定编程语言算法能力的学习者,无论是编程新手还是有一定经验的技术人员。 使用场景及目标:帮助开发者快速定位到合适的算法学习资料,无论是出于个人兴趣自学、面试准备或是实际工作中遇到的具体算法问题,都能找到合适的解决方案。 其他说明:文中提及多个在线学习平台和社区网站,不仅限于某一特定语言,对于跨学科或多元化技能培养也具有很高的参考价值。

    基于springboot的交通旅游订票系统源码数据库文档.zip

    基于springboot的交通旅游订票系统源码数据库文档.zip

    GO语言教程:基础知识与并发编程

    内容概要:本文档是一份详细的GO语言教程,涵盖了Go语言的基础语法、数据类型、控制结构、函数、结构体、接口以及并发编程等多个方面。主要内容包括Go语言的基本概念和历史背景、环境配置、基本语法(如变量、数据类型、控制结构)、函数定义与调用、高级特性(如闭包、可变参数)、自定义数据类型(如结构体、接口)以及并发编程(如goroutine、channel、select)等内容。每部分内容都附有具体的代码示例,帮助读者理解和掌握相关知识点。 适合人群:具备一定编程基础的开发者,尤其是希望深入学习和应用Go语言的技术人员。 使用场景及目标:①初学者通过本教程快速入门Go语言;②有一定经验的开发者系统复习和完善Go语言知识;③实际项目开发中利用Go语言解决高性能、高并发的编程问题。 阅读建议:本文档全面介绍了Go语言的各项基础知识和技术细节,建议按章节顺序逐步学习,通过动手实践代码示例加深理解。对于复杂的概念和技术点,可以通过查阅更多资料或进行深入研究来巩固知识。

    time_series_at_a_point.ipynb

    GEE训练教程

    memcached笔记资料

    memcached笔记资料,配套视频:https://www.bilibili.com/list/474327672?sid=4486766&spm_id_from=333.999.0.0&desc=1

    基于springboot校内跑腿业务系统源码数据库文档.zip

    基于springboot校内跑腿业务系统源码数据库文档.zip

    计算机控制光感自动窗帘控制系统设计.doc

    计算机控制光感自动窗帘控制系统设计.doc

    基于SpringBoot的校园服务系统源码数据库文档.zip

    基于SpringBoot的校园服务系统源码数据库文档.zip

    基于SpringBoot+Vue的美容店信息管理系统源码数据库文档.zip

    基于SpringBoot+Vue的美容店信息管理系统源码数据库文档.zip

    基于springboot程序设计基础课程辅助教学系统源码数据库文档.zip

    基于springboot程序设计基础课程辅助教学系统源码数据库文档.zip

    原生JS实现斗地主小游戏源码.zip

    这是一个原生的JS网页版斗地主小游戏,代码注释全。带有斗地主游戏基本的地主、选牌、提示、出牌、倒计时等功能。简单好玩,欢迎下载

    基于springboot亚运会志愿者管理系统源码数据库文档.zip

    基于springboot亚运会志愿者管理系统源码数据库文档.zip

    毕业设计&课设_含多功能的远程控制工具集(已停维护),含命令行、文件管理、桌面功能.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    Sen2_NDVI_Max.txt

    GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载

    基于springboot家校合作平台源码数据库文档.zip

    基于springboot家校合作平台源码数据库文档.zip

Global site tag (gtag.js) - Google Analytics