对程序员的一些个人建议

作者:郑晖

答读者问

以下内容摘自冒号论坛的一个话题,考虑其具有一定的典型性,故转至冒号空间,希望能对更多的读者有所帮助,也算是一种代码重用吧。

 

读者Jee

之前在Top language里的一位网友像我推荐您的《冒号课堂》,书中eric向您建议开设社区,我猜测可能会有,就找到您的博客发现此地,很幸运您是一个如此有责任心的作者。

我是一名没有什么理论基础的不合格的计算机专业毕业生,毕业后却对软件方面技术非常感兴趣,可能与个性有关。于是在这近2年的找工作和工作过程中看了一些书,也和一些过来人聊过,总体来说让我对软件编程有了一点认识。在阅读您的冒号课堂之前,我曾一度认为我所差的是经验和一些诸如高级算法之类的进阶技术, 可现在,一个用了一个多月时间的夜晚阅读《冒号课堂》之后的我发现我所差的不仅仅是那些,而是最基础最根本的对计算机本身的认识,对数学的认识,对软件工程的认识。

我不想能有速成一说,只想能够现在正视自己,脚踏实地的一点一点的学习和进步,哪怕让我自学4年大学课程也未尝不可,只是有些时候有点找不到一个开始。我数学不好,作为一名程序员我想这是个令人沮丧的事实,我英语也不好,当看到蹩脚的一些翻译著作后痛苦不已。我想尝试着去改变这些,但是却不知该如何去做, 您知道,作为一名已经进入社会的成年人,我需要承受一些生存的压力和一些生活的负担,我希望能更好的利用每天那抽出来的时间,所以望郑晖老师能给我指出一条明道。

我一直没有说我从事的语言和方向,因为我知道这并不是核心,也不是想从您这得到如何学习XX语言等。万分打扰,还望见谅。

 

作者hui答:

你提到的问题十分典型,我非常理解你的心情,同时也非常乐意分享一些个人的看法。

虽然你在言语之中流露出不少负面的情绪,但我看到的却是正面的希望。首先,你对软件技术很感兴趣,而兴趣是学习和工作的最大动力。一般说来,我也没兴趣回答那些对编程不感兴趣者的有关编程的问题。一方面,我会劝他们改行,否则彼此都痛苦;另一方面,我建议的方法通常也不适合他们。其次,你很清楚地意识到自己在哪些方面不足,这是一切进步的基础。许多程序员意识不到自己的无知,甚至自以为足够有知,那又如何能进步呢?最后,你不指望任何捷径,愿意通过踏踏实实的学习来弥补不足。在浮躁之风盛行的当下,这点也是难能可贵的。

关于数学基础,窃以为并非什么太大的问题。几乎每个得知我数学背景的人都会对我说:哦,学数学的人来学计算机自然容易啦。事实上,这种观点虽然极为普遍,但也极为肤浅。本人从事数学14年(从本科算起)、从事计算机12年(与前者有部分重合),在这一点上还是比较有发言权的。事先说明,以下提到的数学不包括高中数学。其实大多数从事软件开发的人员用不到太多的数学知识,他们只需要正常的逻辑思维能力和抽象思维能力。整天拿数学说事,要么是无知,要么是找借口,要么是装高深。当然,我不否认一些高级算法、计算机理论以及人工智能等领域可能涉及到高深的数学知识(其实也只是图论、组合数学、数论、概率论、计算几何、抽象代数、数学逻辑等中的一小部分),但那毕竟只是少数。我也不否认自己的数学背景有助于对编程的理解,但投入产出比太低,不值得作为经验来推广。不过若想成为一位计算机科学家,那就另作别论了——这时数学懂得再多也会嫌少的。

    倒是英语我希望你更重视些。我在《冒号课堂》中专门提过阅读原著的必要性,而且你也意识到译著的质量问题。建议不必特地去学习英语(你本来就会了,不是吗?),只要坚持读经典原著即可。其实,计算机方面的英文算是很容易的了,关键是克服自己的惯性和惰性。开始可能不习惯,看多了就习惯了。在此提醒一点,在阅读时请有意识地培养自己对英语的语感,就像编程时要有意识地培养自己对编程语言的语感一样。

总之,对于程序员来说,数学没有人们认为的那么重要,英语没有人们认为的那么不重要

再说说专业方面的问题。你提到愿意重新自学大学课程,虽精神可嘉,但未必可取。从软件(或建筑)设计的观点来看,这是bottom-up法。作为学生,最好采用这种方法,但你已经参加工作了,所以我建议你更多地采用top-down法。这当然不是轻视基础知识,而是认为获取知识最高效的方法莫过于按需on demand)学习。在实际工作中意识到某个知识点的重要性,从而有针对性地弥补短板,这样学习起来不仅更有效率,也更有兴味。需要强调的是,绝不能只是头痛医头,而要拔萝卜带出泥。只有寻根究底、以点带面,才能快速有效地建立起自己的知识结构体系。对于软件开发这类实践性很强的专业来说,该法尤其奏效。

话又说回来,这种项目驱动式的学习方法也是有一定局限的。毕竟大多项目涉及的深度和广度通常都很有限,单纯凭此建立起来的知识体系不可能非常完善。这就需要平时有计划地阅读一些经典著作以加强深度,并定期浏览一些高质量的技术网站以加强广度。

以上谈的都是一些较为宏观的建议,我想你需要的是更加具体的建议。《冒号课堂》上已经阐述了不少关于编程语言、编程范式、设计原则方面的观点,此处不复赘言。我想特别强调一点——把握抽象abstraction)。事实上,无论是在书中还是本论坛中,我都不厌其烦地再三提到抽象的重要性,今后有时间还会深入地挖掘这一主题。对编程的语言、范式、设计、实现体会得越深,对抽象体会得也越深。借用Hakell的设计者之一Paul Hudak的一句略带夸张的话(overstatement):“abstraction, abstraction, abstraction” are the three most important things in programming。一定会有人会问:难道编程语言就不重要了吗?设计模式就不重要了吗?算法设计就不重要了吗?那是他们尚未真正理解何为抽象——抽象不仅渗透在编程范式之中,也渗透在编程语言之中;不仅反映在设计原则之中,也反映在设计模式之中;不仅体现在架构设计之中,也体现在算法设计之中。

说来也怪,明明是想提具体建议的,偏偏又扯出了抽象,大概不是你想要的答案吧?既然你是计算机专业毕业的,又有一定的工作经验,其实也不需要太过具体的建议。你的苦恼是找不到努力的方向,而这个方向恐怕还是得靠自己去寻找。建议试试两种方法:研读一本有趣的名著或开发一个有趣的应用。只要深入其中,相信绝不会再为找不到方向而发愁,说不定倒会为方向太多而发愁呢。

最后,说句更实际点的话:如果平时能有意识地积累一些计算机以外的领域知识domain knowledge),比如金融、电信、教育、企业管理等等,对提高个人在IT业的核心竞争力也是大有裨益的。当然,前提是你有兴趣或有条件获得这些知识。

一家之言,希望能对你有所帮助。

 

原贴链接:http://blog.zhenghui.org/2010/06/03/advice-on-programmer/

 

扩展阅读:

冒号课堂豆瓣

互动网购买

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 40岁的程序员建议: 1. 保持学习:不断学习新技术和方法可以保持编程技能的领先地位。 2. 拓展知识领域:不要仅局限于计算机科学,尝试了解其他领域的知识,如经济学,心理学,商业等。 3. 提高管理能力:如果有志于晋升为团队负责人或项目经理,则需要加强管理技能。 4. 关注职业规划:考虑自己的职业目标,为实现目标制定规划并积极实施。 5. 关注身体健康:随着年龄的增长,保持身体健康变得越来越重要。 总的来说,40岁的程序员应该关注职业发展,保持学习热情,同时重视身体健康。 ### 回答2: 作为一个40岁的程序员,我有几个建议给同龄的程序员: 1. 不断学习:尽管程序员编程领域有多年的经验,但科技行业一直在不断发展变化。保持学习的态度,了解最新的编程语言、框架和技术趋势,这将帮助你保持竞争力。 2. 保持身体健康:长时间的坐姿和眼睛对电脑屏幕的长时间注视可能会引起健康问题。要记得定期锻炼身体,保持良好的坐姿和视力保护,并养成定期休息的习惯,以减轻工作压力。 3. 多与人交流:与同事和其他领域的专家保持良好的沟通和交流,有助于增加知识和技能。参加行业会议、讲座和研讨会,与其他程序员共同学习和分享经验,扩大自己的人际网络。 4. 寻求个人发展:不要局限于当前的工作角色和职责,尝试在自己的领域以外获得新的经验。探索其他领域的项目,培养新的技能,这将为个人职业发展提供更多机会。 5. 做好知识管理:40岁的程序员可能有丰富的经验和知识库。要学会整理和管理这些知识,可以建立个人博客、参与开源项目、出版书籍等方式将自己的知识分享给他人,并为自己在行业中树立良好的声誉。 总之,作为40岁的程序员,拥有丰富的经验和技能,但也需要与时俱进、保持学习态度,并注重健康和个人发展。随着科技的不断发展,持续学习和自我提升是保持竞争力和找到职业满足感的关键。 ### 回答3: 作为40岁的程序员,我有几个建议给同龄的程序员: 1. 深耕技术:在这个年龄阶段,我们可能已经积累了丰富的经验和技能。建议继续深入学习你擅长或感兴趣的技术领域,保持对新技术的关注,并不断提高自己的专业水平。 2. 建立良好的人际关系:随着职业生涯的发展,人际关系变得越来越重要。建议积极参与行业的社交活动,扩大自己的人脉圈子。与同行交流、分享经验,互相帮助,会有助于个人和职业的发展。 3. 注重身体健康:程序员工作大部分时间都是坐着面对电脑,生活节奏可能比较快,容易忽视身体健康。建议养成良好的作息习惯,定期参加体育锻炼,保持身体健康。身体好才能有更好的精力和状态来面对工作和生活的挑战。 4. 平衡工作和生活:工作程序员来说是非常重要的,但是也要适度关注个人生活。建议合理安排工作时间,确保有足够的休息和娱乐时间。平衡好工作和生活,能够提高工作效率和生活品质。 5. 持续学习和自我提升:技术行业变化快速,要不断学习新的知识和技能,保持自己的竞争力。可以参与培训、课程、研讨会等,也可以通过自学、阅读书籍和技术博客来不断提升自己。 6. 规划职业发展:40岁的程序员已经处于职场的中期,建议制定一个明确的职业规划。思考自己的职业目标,了解市场需求和趋势,寻找适合自己的发展方向,并做好相应的准备和努力。 最重要的是,保持积极的心态和学习态度。40岁并不意味着就已经到了职业生涯的巅峰,只要坚持学习和努力进取,仍然可以在技术领域有所建树。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值