开发者 发展 2 码路指南

码路指南

码路指南:物质驱动与兴趣驱动

但人们这么表达的时候可能并没有意识到常说的这种兴趣是一个不怎么靠得住的驱动力。这种兴趣往往是一种一时的好奇心,而不是与自己性格特质相契合,可以用来给生命解闷的那种兴趣。

总的来看,兴趣可以分为两个层次:一个是浅层次的。比如看到一个游戏比较酷可能想玩玩,看别人写博客,自己也写几篇;另一种则是深层次的。比如:爱因斯坦你不让他思考,他可能感觉活着就没什么意思了。

人和人之间的体力往往相差不大,但智力的差异却往往不可以道里计。所以一个经验丰富的老农半天种一亩地,一个不太熟练的忙和一天大致也可以搞定一亩地。

我个人感觉,越是靠近体力一端的工作越不可能兴趣驱动,而越靠近智力一端的工作越可能是纯兴趣驱动。恰如我很难相信干重体力活的人是因为兴趣一样,我也很难相信爱因斯坦不去做以色列总统而选择继续研究物理不是因为兴趣。

码路指南:别错过人生中学习的黄金时期

基本上讲,35岁以前要把需要花大量时间,比较硬的技能,学习曲线陡的技能掌握,具备工作所需要的所有主要技能,而35岁之后则主要关注知识的更新和某些软技能。

学习时添水战术效率真的很差,每次点一根火柴烧水,一亿年水也烧不开一壶。同时,比较硬的技能往往是需要大块时间投入的,但年纪越大时间越呈现为碎片化,越难搞定硬的知识 —— 先天就容易造就添水战术。比较软的技能,则可以用碎片时间来学习,比如:提高PPT的制作水平,提高表达能力。

如果能够安排好自己的时间和软硬知识的关系,那么就可以在特定基础上做积累,小步前进,使自己的价值越来越高。从这个角度看,年轻绝对是一种债务,大多数人必须在他没完全结束前,还掉所欠的东西。

那么具体来讲那些东西是比较硬的,要在35岁前搞定呢?这因目标而异,但下面这些项目应该具有非常高的通用性:

  • 精通一门最常用的语言
  • 了解一个最常用平台的基本机制,比如:内存管理、线程机制等
  • UML图和面向对象分析设计方法
  • 设计原则,如:职责单一等
  • 设计模式
  • 《代码大全》里讲的一切
  • 精读一个知名的,但有点规模的程序。这点上要感谢开源项目给我们提供了这么多优秀程序。但要谨防好高骛远,动辄挑战Linux内核,精读是关键。
  • 累积一定的代码量,比如:独立的完整做过一个数万代码行的东西。这里的关键是完全自己打造,一定不要拷贝粘贴。
  • 掌握基本算法和数据结构(可以不自己写,但至少要知道其复杂度和区别)
  • 养成一种清晰的编码风格
  • 有自己的专业(金融、高并发网站,图像处理,TTS等)

码路指南:在博与专之间取得平衡

假设说一个人的学习已经聚焦,并且学习的内容和自己实际参与的项目也相吻合,那么是不是就没有问题了?很不幸,答案仍然是否定的,在任何一个子领域里,仍然需要进一步去考虑“博”与“专”的均衡。

与此同时,把一个API研究的再透,也是低值人群,因为这种深入理解和单纯会用某个API相比,从创造价值的角度看,差别不大。

这也就意味着对于大多数软件开发人员而言,要去寻找广博与精专间的均衡点:既不能闭上眼睛,也不能就用显微镜来看世界。而这一均衡点的价值则可用反木桶原 理来说明:木桶原理说的是桶里的水是由最短的一块板决定的,但考量人的价值时却是适用于反木桶原理,即人的价值往往由最长的一块板决定。

考虑博和专的问题不能离开产品开发进行考虑,前面曾经提到过,产品开发往往和公司的现金流绑定的更紧,能为现金流贡献力量的技术才是有价值的技术。 而产品开发本身事实上对博和专的程度提出了最基本的要求,这种要求往往具有迭代的特质。为了形象的说明这一点,这里举一个通用的例子来进行一点说明:

在第一次跌代里,往往需要达到两个最基本的目标。第一个目标是可以为产品贡献自己力量,但代码质量普通。这个目标如果达不到,一个人会失去自己的存在价值。

这时候最少需要了解某种语言(比如:C++)、某个平台(比如:Windows)、某个IDE(比如:Visual Studio)和某些业务相关 的知识(比如:打印体系)。这个范围可以尽可能圈的小点,但用到的则要学透。比如:不管接触到那个框架,都要去了解它的内存机制、线程机制、异常处理组件 构建和国际化处理这些全局性的机制,而不能只是了解某个接口怎么用。

这并非是很高的要求,没有这些就变成了“靠运气编程”,写完程序后还要祈祷他能跑起来。了解这些之后就可以负担起部分开发工作,否则的话只能做旁观者,没法参与到实际工作中来。

第二个目标是把事情做好,并能负担些层次更高的工作。这时候要比较深入的了解面向对象、结构化方法、设计模式、理解设计原则,并能把它们用好。至少要能判定,这个程序写的好,那个程序写的不好,同时面对需求能把工作进行下去。

完成上述两个层次后,可以有两个方向可供选择。

1. 可以进一步考虑专的问题,比如在特定领域里把知识深化下去。

2. 可以把博再推进一步,比如:熟悉专门领域的专业知识、熟悉多种既存框架的特性、熟悉提高用户体验的关键点。熟悉多种既存框架的特性的具体含义是:

设计某一种解决方案时,首先要考虑的就是是自己开发还是使用现有的模块。一旦决定使用现有的模块(包,框架等),那就要进一步考虑究竟用那个。

做这类工作时,如果没有一定广博的知识,做选择的时候就会特别的艰难。

学习软件工程的时机与必要性

简单来讲越是没实践经验的人越不适合学习软件工程,越需要规划整体把握全局的时候越需要学习软件工程。

码路指南:为何你成不了编程高手?

学习失去焦点

而避免“失去焦点”这一陷阱的第一关键则是分类:对软件开发进行分类,对软件所关联的知识也进行分类,形成自己的大局观和整体视图。

学习与实践相分离

“扮猪吃虎”这事儿小说里看着很爽,但挪到现实里来很容易让人掉到学习陷阱里。更可怕的是,现实里有这种心思的人其实也还很多。

有时候会看到这样一种现象:很多人自学的东西和工作中用的东西完全没关系。比如:一边用着C#做Web开发,一边自己学习着C/C++做嵌入式。

这事并不一定不对,只能说非常危险,很可能会导致那样都没有高度。我们得承认当人生被错位的时候,往往只能这样来改变命运,这是没办法,也是正确的。但首先要认识到这样做是相当低效的,低效到一定程度后对的事情也并不一定有结果。

对薪资不满意应该是程序员希望跨界的一个原动力,但收入和年限正相关,与语言非正相关却说明单纯从功利角度看跨界并不明智。因为假设一个人Java语言用过三年,C#用过三年,总的来看收入水平更可能处在三年的水平上,而不是六年的水平上。

解决艰难问题时,天分很重要;解决复杂问题时,练习很重要。所以软件开发的学习过程中,实践很重要,纯理论知识的权重较低,当然基本的算法复杂度还是要明白的。

这也就意味着脱离项目实践的学习投入产出比往往会差。比如说:编程中常见的多线程问题。如果单纯从学习的角度看,创建线程本身并不复杂,掌握各种线程同步 方法(事件、信号灯、互斥量等)也并不复杂。写简单例子的时候,也很少会出错。但一旦落到具体的场景下,虽然多线程的本质没变,但没经验的人几乎一定会在 涉及多线程的代码上导致一会儿出,一会儿不出的问题。

再比如说:你可能看了很多设计的书,但从来没有从头到尾写过什么程序,总是在既有代码上修修改改,或者只是完成几千行代码的小工具,那么你的设计知识是很难融汇贯通的,也还是无法很好的承担大系统的设计工作。

这点上有一个旁证,根据统计最多的Bug是由新手导致的。这从侧面说明,能做和能做好之间的鸿沟需要大量的实践来填平的。

在这样一种前提下,期望先选个工作,再自己学习,努力转行这样的想法是损失很大的。单纯从增值效能上看,解决这点很简单,除非必须放弃当前的工作领域,否则要以当前参加的项目为根基展开学习,这样才能比较好的调和学习和实践。

而除非一个工作领域过于偏狭,大多时候在编程语言(C#→C/C++)、不同领域间(图形处理→地理信息系统等)穿越损失可能更大。

40个迹象表明你还是PHP菜鸟

码路指南:程序员的几个职场发展方向

增值、读书与大局观

单纯从达成某一目的而言,读书往往非是绝对必要条件。

秦始皇把书一把火烧了,刘邦项羽一样造反并取得胜利。但读书无疑的可以加速一个人增值的过程,记不得是谁说过:实践无疑是人类最好的老师,但只靠实践来认知世界无疑也是愚蠢的。这是非常精辟的。除此之外,要想培养大局观,那就非读书不可。

每个人的亲身经历,在大的时空背景中往往只是一个简单的截面,这一截面中绝不会包含可以归纳出所有真理的事实,因此只依赖于自身的实践也就必然限定 了一个人的视野。 这一点随着一个人的责任范围变大往往会体现为一种制约和限制。所以培根讲:有实际经验的人虽能够处理个别性的事务,但若要综观整体,运筹全局,却唯有学识 方能办到。

即使从实践来看也是如此,要想培养出一种大局观,那就非读书不可。而大局观往往是成为将帅之才的必要条件。

路径一:由程序员而架构师

路径二:由程序员而CodeGuru

路径三:由程序员而纯管理

当技术变成兴趣,谈谈我的一些近况

机关

现在在国土资源部门负责信息方面的管理工作,工作内容嘛,几乎不怎么从事开发了,最多就是偶尔改下原有系统/网站的代码。然后就是负责局里的一些大 大小小的信息系统事务,日常维护,与其它机关单位打交道……等等。怎么说呢,感觉就是一枚不断运转的齿轮,辅助局这个大机器的每日正常运转。 机关单位里虽然不像开发公司里那么忙,但也不是很多人想象得那么清闲,大部分时候还是挺繁忙的。

1. 网站的Android客户端

2. 魔题库

十年学会程序设计

我的编程成功秘笈是:

  • 首先要对编程感兴趣,能从编程中得到乐趣。一定要让它足够有趣,因为你要保持你的兴趣长达十年。
  • 与别的程序员交流;阅读别人的代码——这比看任何书或参加培训课都重要。
  • 实践。最好的学习乃实践。俗话说:“编程的至高境界一定要通过充分的实践才能达到,而个人的能力可通过不懈努力获得显著提升。” (p. 366) “最有效率的学习需要明确的目标,适当的难度,知识回馈,并容许重复或修正错误。”
  • 如果你愿意,花四年学习大学课程(或者再加上读研)。这将给你赢得某些工作机会,并给予你在该领域的深层见解。但如果你不喜欢学校的学习,你同样 可以在工作中获得相似的经验。无论如何,单靠书本是远远不够的。“学习计算机科学不会让你成为编程专家,如同学习绘画和色彩理论不会让你成为画家一样”。 这是埃里克·雷蒙德(Eric Raymond)说的,他是《新黑客字典》(The New Hacker‘s Dictionary)的作者。我雇用过的最优秀程序员,只有高中文凭。但他开发过许多伟大软件,有自己的新闻组,通过公司认股赚的钱就让他买下了自己的 夜店。
  • 和其他程序员一起参与工程项目。在某些项目中担当最优秀程序员,在另一些项目中充当最差劲程序员。充当领头羊的时候,你要测试你领导一项工程的能 力,并用你的视野来激发他人;如果在项目组中垫底,就应该学习其它牛人在做些啥,以及他们不喜欢做的(看他们把哪些活让给你做)。
  • 继续别人的工程项目。去理解先前程序员写的程序。学习如何理解并解决先前程序员没有考虑到的问题。思考你的程序该如何设计以便让之后的程序员更容易维护。
  • 至少学6种程序语言。其中包括一种支持类抽象的(Java和C++),一种支持函数抽象的(如Lisp或ML),一种支持语义抽象的 (Lisp),一种支援声明规范的(如Prolog或C++模板),还有一种支援协程的(Icon或Scheme),另外一种支持并发的(Sisal)。
  • 记住,在“计算机科学”里有“计算机”一词。理解计算机执行你的代码的时候花费的时间。比如:从内存中取一个字(考虑有无缓存未命中情形),连续从磁盘读字,或者在磁盘中定位。
  • 参加语言标准化工作。这可能是有关 ANSI C++ 委员会,也可能是决定你编码风格是两格缩进或四格缩进。无论如何,你要知道其他人对语言的喜好程度,有时还要想想他们为什么喜欢这样。
  • 知道自己应该在何时脱身于语言标准化。

人生真的是一场马拉松吗?

我觉得我现在就挺好,在事业单位里,钱多事少离家近,在环境优美的珠海舒舒服服过活,没事就自己折腾下技术,有空就自己捣鼓下项目,写写博客什么的,为啥 一定要背井离乡到北上广拼呢?不是说去北上广拼不好,而是生活有很多种选择。为啥做IT就一定要努力去比过别人?努力去超越别人的技术,努力去超越别人的 月薪,这就像跑马拉松一样,太累了。

1一个正规可以帮到很多人的网站,一个月大概12K收入

2 股票,去年回报大概相当于全年薪水

学习一样新东西行而有效的方法

1. 热爱你学习的东西

2. 阅读与之相关内容

3. 尝试。但不要太艰难

4. 找到一位老师(外加一个10倍速规则)

5. 学习历史,学习现在

6. 先易后难

7. 回顾你学过的东西

8. 你就是你最要好的5个朋友的平均数

9. 多多益善

10. 找到你自己的魔鬼计划

时间: 2024-10-10 07:42:57

开发者 发展 2 码路指南的相关文章

android插件化-apkplugdemo源码阅读指南-10

阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本编写  最新开发方式以官网为准 可下载最新的apkplugdemo源码http://git.oschina.net/plug/apkplugDemos apkplugdemo演示图 一 apkplugdemo工程源码结构 src |-com.apkplugdemo.adapter             --插件列表Adapter |-com.apkplugdemo.adapter.base     

初级开发者也能码出专业炫酷的3D地图吗?

好看的3D地图搭建出来,一定是要能为开发者所用与业务系统开发中才能真正地体现价值.基因于此,CityBuilder建立了与ThingJS的通道——直转ThingJS代码,支持将配置完成的3D地图一键转为代码,不仅减少开发者的工作量,还能作为非GISer开发者的地图教学工具,使一般开发者也能码出专业.炫酷的3D地图. 上节说到如何使用GeoJSON.QGIS编辑地图数据,使用CItyBuilder搭建一键城市模型,并且转入到ThingJS开发,以免大家遗忘,我将步骤再次贴出来,然后告诉大家如何使用

一个软件开发者的BPM之路

我是小林,一名普通的软件工程师,从事BPM(业务流程管理)软件开发工作.我没有几十年的技术底蕴,无法像大牛们一样高谈阔论,品评BPM开发之道:也不是资深的流程管理专家,能与大家分析流程管理的时弊.我只是一名有着一轮工作经历的软件开发者,更准确说是流程开发者,有那么几次特殊的经历,可以窥探一丝BPM开发的发展轨迹. 2004年,我初入软件行业.当时,国内BPM软件产品大多还处在概念阶段,它们基本都是非常专业的中间件级产品,复杂的状态机.活动.事件等概念充斥其中,只有高水平的开发实施人员才能驾驭.而

独立开发者的自由之路 ——1

人总是这样,每当停下来了,总会胡思乱想,想人.想事.想人生, 到头难免是怨人.怨己.怨无常 可笑的是,人人渴望自由,可人却离不开约束 公司已是3个月没发工资了,或走或留,每个人的想法却是不一样,人心惶惶,前途渺茫 听了很多讨薪的故事,也听到了很多公司的内幕 一纸契约的关系,很多人以为往里面投入感情便会更加牢固,殊不知大人只讲利益,小孩才讲好坏 今天接到网易的电话面试,可以说是大败而归! 1.各种类型的强制装换. 2.const 函数的使用 3.重载,重写和重定义 美丽的帕斯深林里面住着一群可爱的

VBA开发者的转型之路

什么是VBA语言? 相信看这篇文章 的用户应该都知道什么是VBA,在这里还是简单介绍一下,Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言.主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件.也可说是一种应用程式视觉化的Basic 脚本.该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言--------Visua

开发者 发展 8 效率 web服务 如何学习

Web服务的方式有哪几种面向服务架构的技术 SOAP - 一个基于 XML 可扩展消息信封格式,需同时绑定一个传输用协议.这个协议通常是 HTTP 或 HTTPS,也可以是 SMTP 或 XMPP. WSDL - 一个 XML 格式文档,用以描述服务端口访问方式和使用协议的细节.通常用来辅助生成服务器和客户端代码及配置信息. UDDI - 一个用来发布和搜索 Web服务的协议,应用程序可借由此协议在设计或运行时找到目标 Web 服务. W3C 负责 XML.SOAP 及 WSDL:OASIS 负

开发者 发展 7 二八原理

二八原理:你必须知悉的二八原理无处不在的二八原理 二八原理是一项对提高人类效率影响深远的法则.就是要让有限的时间产生出更多的成果.二八原理告诉人们:在投入和产出.努力与收获.原因和结果之间,普遍存在着不平衡关系.少的投入,可以得到多的产出:小的努力,可以获得大的成绩:关键的少数,往往是决定整个组织的产出.盈利和成败的主要因素. 小时候老师经常教导说:“一分付出一分回报”.用数学的术语讲,就是付出和回报是呈线性相关的.很多人受此影响(可能是潜意识的影响),都习惯于平均分配 时间.精力来处理问题.结

开发者 发展 3 veda原型 解决浮躁的泥沼

关于编程与人生的片言只语 和世界格局一样,软件开发里也是多维力量(商业.公司政治.技术等)在冲突,单纯地斗争和避让其实都不太行. 能否处理模糊的东西是判断力的关键.现代管理里老说用数据说话,就给人一种误解,以为数据是判断的基础,但其实不是.如果一切都可量化,判断就半点价值也没有,猪也能干,恰是因为有些东西无法量化,判断才有价值,人才有差异.软件里问题尤甚. 如果说抽象是软件设计的核心,那么抽象不充分则是软件要面对的核心问题,可以说本质上讲OO,设计模式等要解决的首先是抽象不充分.但抽象本身并非毫

开发者的进阶之路:用语法树来实现预编译

如何在保证安全性的前提下,提升开发过程的效率,是每个开发者都在不断探索的问题.借助语法树,开发者能够更好地展现和修改源程序代码,优化开发环节,提高安全系数,还能进一步实现安卓预编译. 本文基于个推高级研发工程师李健民在该领域的实践经验,与广大开发者们一同交流语法树在开发过程中的相关应用和具体使用场景. 什么是语法树 语法树是一种树状结构的源程序代码呈现方式,它可以很好地展示源程序代码的信息,这其中就包含了:保存源程序的代码信息和对应运行时的结构. 如何生成一棵语法树?在回答这个问题前,我们需要先