首页 > 代码库 > 程序员生存定律-摘要(自身提高角度)

程序员生存定律-摘要(自身提高角度)

20~30岁这个阶段可以讲是黄金时期,这个阶段里,家庭负担较小,可以自由支配的时间较多。当然撞到了很特别的、需要疯狂加班的公司只能另算。

30岁之后因为娃娃出生等,家庭上的时间开销增加,个人可支配时间变少。其中很大一部分人还有很大可能会面对电视剧里常说的婆媳矛盾,让你每天心绪不宁。

40岁之后,家庭琐事会进一步增加,典型的上有老下有小。实在运气不好的自己也会生点病---颈椎病、腰间盘突出、胃病大概可以入选程序员的三大职业病。

50岁之后,时间上会再次解脱,但可惜的是自己也老了,时机不在。

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

 

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

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

-----------------------------------------------------------------------------Base----------------------------------------------------------------------------------

  那具体来讲,那些东西可以被认为是编程的根基,需要在学习阶段扎实的掌握?下面将通过推荐几本书(或者说几类书)来描述一个共通于所有程序员的最小集合。 

  • 计算机体系结构

这一类别下最具代表性的书籍是《深入理解计算机系统》,作者是Randal E.Bryant和David O’Hallaron。读这本书的目的是了解计算机到底是怎么个东西,软件到底运行在什么样的基础之上。

  • 算法和数据结构

这一类别下最具代表性的书籍是《算法导论》,作者是Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein。读这本书的目的是了解软件到底可以用什么样的手段干些什么事情。软件是一种工具,可以帮助解决人类面临的许多问题,而主要手段则只有两种,一种是这本书里所介绍的算法和数据结构;另一种则是下一类别中所涉及到的分析和设计方法。它们像小刀子一样,可以把各种领域中的各种问题进行分割,并映射到程序的世界里来。 

  • 设计原则和模式

这一类别中比较有代表性的书籍是《敏捷软件开发:原则、模式与实践》,作者是Robert C.Martin。读这本书的目的是了解数据结构和算法之外另一种对现实问题进行抽象的方法如面向对象以及进行这种抽象时所要遵守的原则。

这类书籍经典的还有很多比如:GoF的《设计模式》,而之所以选择上述这本是因为这本书里提供一些比较完整的例子,更适合初学者一些。

  • 软件工程

这一类别中最具代表性的书籍是《代码大全》,作者是Steve McConnell。读这本书的目的是建立对软件开发的全局视图。知道一个软件从无到有所要经历的一系列过程。

软工的书还有很多,比如很有名的《人月神话》,但《人月神话》类书其实对很多人是不适合的,对初学者就更不适合。

上面四本书是一个最小集合,针对不同场景需要进行不同的增加,比如可能需要进一步了解某种框架的机制,那就需要读《XX技术内幕》这类书。但即使是读这几本书也不适合只读书而不动手,最好是穿插在上一节中提到的实践中来读,否则的话对后两本的理解会有所欠缺。

如果想走厚积薄发这条路的上面几本书是一定要预先读通的。阅读过程中,如果发现有些细节问题彻底无法理解,那就要在实践过程中进一步琢磨,找到自己的答案。读这类书时,有一件事情一定要有心理准备:虽然这些书读通并不容易,很花时间,但想读了这些书后立刻写出来一个能卖点钱的工具是不太可能的,这真和大楼的地基一样,没什么立竿见影的效果。

我个人的观点是以3000代码行为界算第一个一点,也就是说一个人学会某个语言后小练习不算,先完成一个3000代码行左右的,没有UI的独立程序。

假设说一个新手已经熟练掌握了一门语言,那么完成上述的任务估计需要2~4人周,当然有经验的人1个人周左右已经足够了。

在此之后,可以精读一个上点规模的(1~5万行最佳)独立性比较强的应用程序,由于已经上了规模,做到完全的与平台相隔离就有点难了,没法提供统一的例子作参考。但选择标准主要有两个,一个是尽可能和自己未来期望的方向相吻合,一个是尽可能比较独立和经典。

精读之后,就要再找到一个项目来实践。这里的关键是真的项目,至少要有真的用户,并且用户数目越多越好。最好是能够向知名开源项目提交代码。 

各种基础知识中比较例外的是计算机体系结构、数据结构和算法这类理论性比较强的东西,这种学习曲线比较陡的东西需要结合大学的课程把它学会,接下来再在实践中逐渐应用,而不能一边做事一边学习。原因是学习曲线越陡的东西越需要大块时间,毕业之后再学效率会差。 

总的来看,上述几个步骤,应该在大学毕业后2~3年内完成,最好在大学里完成,这样可能会有点优势。这些完成之后,打基础阶段可以算是基本结束。

-------------------------------------------------------------------------------Base--------------------------------------------------------------------------------

提升技巧+避免选择失误

程序员生存定律--如何尽快变的稍微专业一点 http://www.cnblogs.com/daoshi/p/3807301.html

程序员生存定律--成长路上常见的坑 http://www.cnblogs.com/daoshi/p/3815941.html

程序员生存定律--成长路上常见的坑(2) http://www.cnblogs.com/daoshi/p/3821547.html

-------------------------------------------------------------------------------Higher------------------------------------------------------------------------------

软实力

程序员生存定律--表达背后的力量(1) http://www.cnblogs.com/daoshi/p/3834954.html

程序员生存定律--表达背后的力量(2) http://www.cnblogs.com/daoshi/p/3843900.html

对于程序员而言,在这个上面需要注意的点并不多,也不需要把自己搞的很累,但有几条传统的智慧还是要的:

  • 欠人的要记清楚,别人欠自己的可以含糊。不要认为任何对自己的帮助都是理所应当的。
  • 不要为无谓的事情争吵,乃至口出恶言。人与人的关系坏起来容易,修复起来难。
  • 要言而有信,确实无法信守承诺时,要主动道歉。
  • 不要通过贬低别人来证明自己,也不要因为言辞不当让人以为是在贬低别人。
  • 不要恶意欺骗他人。想想当你被恶意欺骗了,你会什么感觉,就知道恶意欺骗别人能造成多大的伤害。

-------------------------------------------------------------------------End--------------------------------------------------------------------------------------