目录
1 【思想】反思编程的起源
2 【管理】管理开发团队的新想法
3 【工作】贯穿的追求与动力源 + 观点共鸣
4 【工作】技术成长是一种慢突变,珍惜生涯贵人
实际上我的这篇文章,最开始仅仅源于有人推荐我看了别人的一篇优秀博文。
真是很优秀,大家可以都去看看。
《驾驭你的“职场布朗运动”》
作者李云在其中通过描述他的前半段职业生涯,详细解释了他 25 条职场感悟的产生过程;这种方式能够让我们产生共鸣,并以此学会总结自己的工作感悟;这就是所谓的“成功之心”吧。
下午写了份回复,结果没想到突然笔记本计算机自动重启了!于是只好重新写……很多字呢…… T T 不过借着重写,我自己又重新深入思考了自己的想法,补充了一些没想到位的内容。
---------- ---------- ---------- ----------
1 【思想】反思编程的起源
这次感悟源于我看到了《驾驭你的“职场布朗运动”》
中程序逻辑控制(PLC)那部分。
我不是计算机专业出身,所以对于行业历史缺乏足够的了解。因为工作中没有大量的时间做这些闲事,我也就只能了解了下状态机、Unix 发展过程、GNU/Linux 发展过程、服务器思路变更等内容,很多能让我把行业精神融会贯通的东西,我都不知道。
今天,我看到了程序逻辑控制,一下子有种恍然大悟的感觉。以前很多注意到过但没办法想过的事情,就这么都看通了。对于我来说,程序逻辑控制这种东西,让
我看到了电气自动化的经验升级为编程的中间段,让我看到了编程诞生的胚胎。知道了这个中间段,我就终于知道为什么过程化编程会先兴盛,终于知道如今这种重
视分支的编程思路是怎么来的。mianshi
我有种感觉,如果我继续在软件业工作,我就有希望提出一种和面向对象思想同样级别的编程哲学。这就归功于我今天看到过如今程序哲学的来源,让我的思维能够跳出这种定式。
说起来,其实美国推广软件学新思路的人,哲学素养都挺高的。我想起以前参加第11届中国系统与软件过程改进年会时交谈过的 Ivar Jacobson
,他是 SEMAT
,一个融合现有各软件开发理论的理论,的开创者。此人能够很自然地运用范式理论(库恩哲学)对自己的理论进行宣传,能够应用后热力学时代的状态-过程分离
思考法来开发软件生产、管理过程。(参看我另外一篇日志《参加云时代质量的力量论坛与 16 届软件展览会的一些收获》
)
熟悉自由软件的人也会知道,Richard Stallman 的各种宣言,在不少中国人看来都有些假大空。不过结合 GNU 计划的实干主义色彩我们就可以明白,他们觉得追求“XX思想”、“XX精神”是一种平常的事情,不假不大不空。
关于新的编程哲学我脑中还没有成型。我隐隐觉得,它会参考人类的思维模式而获得前所未有的“高预证伪性”,然后获得成功……
---------- ---------- ---------- ----------
2 【管理】管理开发团队的新想法
因为参加中国软件协会过程改进分会的论坛,所以我被这种理念浸入地很深。我认为过程改进应该是每一个软件人员对自己的要求,也就更是管理软件开发最重要的任务。重视过程改进,意味着认同如下观念:管理软件生产,最重要的不是保证这次做好,而是保证下次比这次做得更好。
《驾驭你的“职场布朗运动”》
中
提到,在 UTStarcom
研发部,因为软件规模很大,所以才意识到把设计等软件过程独立划分出来具有什么样不可替代的意义。实际上我们无法指望团队中的人都具备这样的经历和感悟强
度,能自行悟理;所以我们才需要通过管理去规范化团队开发者的行为。在小型产品的时候,就尽可能为大产品的更高效作出生产制度上的准备。
我在这方面有个新想法,目前准备下周二(2012-11-13)开始在新研发团队上进行小规模试验。今天看到《驾驭你的“职场布朗运动”》提到作者接触美国软件人员随便谁都知道怎么去做架构师的情况,更坚定了我尝试的信心。
参考日本的分层模式带来的高效配合和美国软件人员的全能模式带来的软件人员健康成长,我认为应该在软件生产过程中引入“平级”的员工关系,但在具体的事情上,明确分工职责。上述“分工”,采用分层分工,分离分析、设计、单元测试、编程过程。
也就是说,比如团队有 5
个人,哪几个人做架构师,这是大家讨论决定的,哪几个人做设计、做编程,也都是这么决定,并不把人限制死,也不论资排辈只根据整个团队对他们的信任程度。
同样,每个人都有可能但不绝对,会用别人设计的方案来进行编程,为别人要编写的程序准备单元测试。
---------- ---------- ---------- ----------
3 【工作】贯穿的追求与动力源 + 观点共鸣
《驾驭你的“职场布朗运动”》中提出了 25 条职场感悟。我赞同其中 24
条。这其中特别是关于细节的意义、看似无用的知识积累的意义、文档的多重意义、好习惯的意义这些,尤其能获得我的共鸣——真希望我的同事们、广大中华大地
上没有被认真进行过工程学培养的程序员们,都能够在工作中体会到这些……
然后是关于阶段性目标——第四感悟。我看到李云在自己的成长之路中,不断经由第四感悟“制定阶段性项目目标,以做项目的形式提升学习效果”,来促使自己坚定不移,提高技术水平;也建议对成长迷茫的人采取这样的成长法。
不知道是不是性格不同。我的各种进步,几乎从没有来自于这种阶段性项目目标。我也一直在做这些通过一段努力而能实现的东西,工作嘛,都少不了做做项目。
不过这种项目过程本身只能给我积攒出作品,而整个过程全都是我把已经会了掌握了的东西用出来,对我的技术长进并不大。相反,信念让我在做各种事情的时候都
遇到困境,并必须解决迈过。这是我个人的成长来源。
我的信念有很多,比如我就是所有的东西都要力争做到 0
错误(无错),我的所有出品必须是精品(求精),我就一定得提出比所有视野中的方案都优秀的方案(争强),我就是要前瞻行业的发展方向,我就是一个不一样
的人,我就是一个绝不应付绝不糊弄丝毫的人,等等很多。真的,在我的职业生涯中,甚至我生活的其它擅长的方面,这才是我不断努力提高自己的根本原因……
纵观《驾驭你的“职场布朗运动”》
作
者李云的职场,其实根本就没有进行标准意义上的布朗运动,因为他一直在有所为有所不为地进行控制。也因此,他的职业生涯能够实现早年他自己的期望。我个人
认为,成功的职业生涯,应该更像是流水中的布朗运动。我们无法控制社会对我们无序的影响,但我们可以选择比较符合我们前进方向的去接受。
---------- ---------- ---------- ----------
4 【工作】技术成长是一种慢突变,珍惜生涯贵人
《驾驭你的“职场布朗运动”》
作
者李云在做 Visual C++ 某变电站图像监控程序的时候,长进好大啊。“在大立公司所参与的第一个软件项目,是使用Visual
C++从事Windows某变电站图像监控桌面软件的开发。”“通过该图像监控桌面软件的开发经历,掌握了Windows
VxD驱动开发、socket通讯、多线程编程、图像处理(锐化、伪彩处理、图像字符识别和图像对比等)、ODBC数据库编程(用的是SQL
Server)等。”
后来李云掌握了x86处理器、PowerPC
8250处理器架构、操作系统实现方法等,都是在接下来的四年多逐渐掌握的。我们可以看到,网络、多线程、图像、数据库、驱动,都是他在一个项目周期内掌
握的技术。之后的技术积累都是长年积极工作学习收获的,是慢功。只有最开始这一份 Visual C++
的监控程序项目,是一种技术的突进型提高。我管这叫做“慢突变”。
我自己也经历过 1.8
份这样的慢突变。我早年做算法出身,后来为了工作,参加了社会软件培训(达内科技Java工程师培训)。别人为了学习编程,而我本是为了学习工程学理念。
就在这个培训期间,我算是深刻体会了面向对象设计、学会了网络编程、HTTP
编程、多线程理念和并发安全、高级数据结构、框架思想、关系型数据库,通过接口体会了解耦合思想、等等。这些所有的长进,都是在短短半年多完成的。之后直
到几年后我终于自主设计完整系统的时候,我还是在将这段时期学到的思想、技能使用出来。
另外 0.8
次,是我关于架构方面的成长。早年某次在北京找工作,应聘英国某发动机公司Java开发岗位,遇到了沙先生。我在此之前刚独立做完一套云基础架构的模型作
为上一家公司的服务器基础架构,也像李云刚到 UTStarcom 的时候,有些自满。沙先生是 Oracle
公司出身,听我自述之后,问了我几个架构的问题。可笑我当时还分不清设计软件结构和架构设计工作的区别,一直在答非所问地讲述我对程序组织规划的理解。于
是沙先生指责我根本不懂架构,不过因为我是南京大学出身的,他是南京人,所以还是决定录用我。
虽然我之后并没有去那家发动机公司,但沙先生的冷水成功让我从自满中解脱出来,并对我在架构上的无知提了醒。之后的工作中我一直在尽力关注架构方面的内容,也基于所做产品沿承的习惯对架构有了些少量的了解,但这方面的成长一直很慢。
直到更后来,我第一次成为服务器首席工程师,必须要负责起架构方面的工作。这时承蒙我的同事哈春宁同志加盟我的团队,这真是雪中送炭啊!在他的引导下,
我在短短几个月内熟悉了虚拟化基础环境、熟悉了 GNU/Linux
服务器特性、熟悉了几大主流开源数据库的特长、熟悉了很多种集群方案、熟悉了网络权限认证和安全的各种原理。当这些都被我掌握的时候,我才在某一天惊讶地
发现,我为新互联网产品进行的各种架构安排,已经全都具有充分的理由,已经全都能在脑中想到其它可选方案的优劣。我已经实际上成为了一名架构师。
这就是我的 0.8 次技术成长慢突变。
我想,大家的职业生涯中,都会有很多人能成为咱们的启蒙、引导、助推的导师。他们就是咱们的生涯贵人;他们能够让我们产生技术成长的慢突变。可惜也许每个人生涯贵人本有很多,却被咱们不小心的或忽视或错过了大部分吧……
---------- ---------- ---------- ----------
好啦,本次博文要发的内容基本上完毕了。
我目前是掌趣科技股份有限公司智能终端事业部服务器组首席工程师李伸。我最近主要的工作是培养团队、将公司项目产品化、主持制作自由软件工具并用于公司产品中。
接下来我马上准备用 Java 制作一个高可用的内存数据中心产品,对系统的即时性有很高要求。目前包括技术方案选择、基础软件结构都还没有敲定。如对此有兴趣的同仁可以与我联系。本产品依旧准备做成自由软件~
本文发表在我的技术日志
CSDN : http://blog.csdn.net/shanelooli/article/details/8165132
开源中国: http://my.oschina.net/shane1984/blog/88184
51CTO : http://shanelooli.blog.51cto.com/5523233/1055240
分享到:
相关推荐
### CUDA编程:开发人员并行计算GPU指南 #### CUDA简介 CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的并行计算平台与编程模型。通过利用图形处理单元(GPU)的强大性能,CUDA允许开发者将复杂...
CUDA开发者社区技术总监亲自撰写,英伟达中国首批CUDA官方认证工程师翻译,译著双馨 全面、详实地讲解了CUDA并行程序设计的技术知识点和编程方法,包含大量实用代码示例,是目前学习CUDA编程最权威的著作之一
在当前的数字化时代,图像识别技术已经广泛应用到各个领域,其中之一就是食物识别。MATLAB作为一个强大的数值计算和数据分析工具,也常被用来开发图像处理和机器学习算法,本项目"shane7226107-foodRecognition.zip...
不可多得的GPU编程指南,高清完整版,之前淘宝买的,赚点积分
这份文档模板由Shane提供,通常与源码管理和工具使用相关,帮助开发者遵循一致的格式和标准,提高项目开发的效率和质量。 详细设计书是软件开发过程中的关键环节,它在需求分析之后,编码之前进行,目的是将需求...
### 知识点一:Shane版详细设计书模板概览 #### 1.1 背景与目的 - **整体行业背景**:随着软件工程领域的快速发展,特别是在敏捷开发方法论的影响下,传统的详细设计文档面临着简化和优化的需求。 - **项目开发...
控制器通过操纵模型并将数据定向到视图来处理传入的请求(例如,保存新帐户,更新产品,显示帖子)。 在Rails中,该模型由称为Active Record的对象关系映射层处理。 该层允许您将数据库行中的数据显示为对象,并...
这个插件的独特之处在于它的功能是针对特定语境的,即它会在文档中找到包含"Shane Gillis"这一短语的地方,并将其中的单词"comedian"用引号括起来,以此来强调或突出这个词。这种操作可能对于那些关注喜剧演员Shane ...
这个配置文件可能包含了各种工具和软件的个性化设置,以便于他在日常的编程工作中更高效地进行开发和管理。 描述中提到的“配置文件”是指用于设置和定制软件行为的文本文件,这些文件通常包含了一系列指令或参数,...
Shane_TankGame是一款由学生在学习过程中开发的项目,它展示了C#编程语言在游戏开发中的应用。在这个项目中,我们可以深入探讨C#的基本语法、面向对象编程、图形用户界面(GUI)设计以及游戏逻辑的实现。 首先,C#...
根据提供的文件信息,...实际书籍中的内容可能包括更多细节,如CUDA的内存管理、多线程编程模型、性能优化技巧等。而且,文件信息中存在OCR扫描错误,部分文字可能不完整或存在偏差,但基本不影响对上述知识点的理解。
该存储库随附Shane Hudson的 (Apress,2014年)。 使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您的计算机上。 发行版 版本v1.0对应于已出版书籍中的代码,没有更正或更新。 会费 请参阅文件...
《android移动应用开发 第3版 卷Ⅰ:基础篇》由Lauren Darcey Shane Conder著 北京麦秆创智信息技术有限公司译 涵盖了android开发从概念 技术到市场推广应用的全部主题 内容包括android平台概览 android应用程序设计...
DnDNext,由Shane Herd和Dane Gilbert共同开发的Android应用程序,正是这样一款致力于提升D&D Next游戏体验的创新工具。本文将深入探讨该应用程序的核心功能、设计思路以及其背后的技术实现。 DnDNext的主要目标是...
在本项目"GAME3111_A2_Shane_Raquel"中,我们可以推测这是一个与游戏开发相关的课程作业,可能是GAME3111课程的第二部分。由于唯一提及的编程语言是"C++",我们可以假设这个项目是用C++语言编写的。"GAME3111_A2_...
"Shell"标签则与信息技术和编程相关,特别是指命令行接口(CLI)或者Shell脚本,如Bash Shell。Shell在计算机科学中是用户与操作系统交互的一种方式,它允许用户输入命令来执行任务,比如文件操作、程序控制等。...
在这个项目中,学生通常会利用数据库技术(如SQL Server 2000)来构建数据库,并使用编程语言(如Visual Basic,简称VB)创建一个用户友好的图形用户界面(GUI)。下面将详细介绍这个项目中的关键知识点: 1. **...
Jim Shore是敏捷开发和极限编程(XP)的早期倡导者和实践者,而Shane Warden在敏捷社区中也很有影响力。这本书不仅涵盖了敏捷开发的实践技巧,比如迭代规划、持续集成、测试驱动开发、重构等,还深入探讨了如何在...