做了40年的程序员是一种怎样的体验?
一个从1984年就开始做程序员的老哥出来“发声”了。
他总结了自己近40年的从业经验,收集了13条建议,希望能给长期想做程序员的新手提供一些帮助。
快来看看他都分享了哪些干货。
这位哥哥的名字是诺亚·吉布斯。曾就职于Nvidia、AppFolio Inc、DAQRI等公司,目前就职于Shopify。
作为一名资深软件开发人员,他一直活跃在开发的第一线。
但和他想象的不一样,这次他没有引入任何语言或框架去学习,而是指出了一些他认为比技术更重要的东西。
(以下是作者诺亚·吉布斯的语气)
1.几岁开始永远不晚。
大约一年前,在我45岁的时候,我开始学习弹钢琴。感觉这一年一直在进步,相信坚持到60岁一定会很棒。
编程也是如此。当你已经有了一些其他领域的背景,你会很快学会编程。
相信我,如果你50岁开始做程序员,10年后,你60岁的时候,肯定比我18岁的水平强很多。
我遇到过很多优秀的程序员,他们都是20岁、30岁甚至40岁开始的,所以我不知道你为什么不能在50岁、60岁开始。这一行需要时间和工作,但你不一定要年轻。
2.尝试不同类型的编程。
如果你是行业新人,想长期从事编程行业,我的建议是:多写软件。什么软件,写什么都不重要。
在我40年的程序员生涯中,许多趋势来了又去。可以说,让自己尝试不同类型的编程很重要。
这可以让你的思维不变得僵硬,事实证明,几乎任何规则都可以教会你一些东西。
如果你过于坚持单一的任务,你很可能会失败。
3.不要怕回报慢。
不要觉得自己学的东西没用,因为没用只是相对的。
我曾经花了很多年的业余时间研究一种叫做DGD的古老的MUD编程语言。当然,这并不是为了实用价值,因为几乎所有关于它的东西都是陌生的、不规范的,真正能应用的很少。
但它教会了我很多。它教会了我Ruby on Rails后来的应用。它教会了我如何使用数据库编程。也教会了我后来学的五六种语言都可以用的东西。
有趣的是,多年后我在DGD找到了一份咨询工作。世界上没有多少DGD工作,但我有一个!这比我学过的很多“实用”语言都实用。
正如我总是对自己说的,“还早着呢。”你可以学到更多有趣或者有用的东西,哪怕可能是十年、二十年、三十年后才有回报。
不要总是选择18个月后会变好的东西,因为你无法预见未来会发生什么。
4.找到工作的吸引力。
你一定是开始写代码了,因为它的某些方面吸引了你。你要做的是试着找出它是什么。
这个答案每个人都不一样。对我来说,我喜欢写代码给我带来的成就感和智能。
只有在工作中找到足够吸引人的点,才能长期坚持。
如果你感觉不到任何吸引力,你可能需要休假或者重新寻找自己喜欢的工作,因为这样的工作只会让你疲惫不堪。
5.不是短跑或者马拉松,是写日记。
如果你是新手,在下定决心“我要做程序员”之后,你大概会制定一个详细的计划。该计划可能包括8个大点,56个小点等等。
我不会告诉你不要这么激动,但我会说:不要把这个计划看得太重。因为你不可能事事都靠计算和计划。
在某些时候,你并没有“偏离自己设定的任务”,你只是“过好自己的生活”。这不是失败,也不是放弃。
你无法预测什么是有价值的,所以你应该学习一切。我的经验是,你活得越久,工作得越好,你就越会意识到,一切(每个人)都可以教会你一些有用的东西。
你不是在跑短跑或马拉松。反之,就像写日记一样。
十年后,你会翻看这篇日记,说“哇,我做了一些很酷的事情”或者“嗯,我是一个很有趣的人”,但我想你不会在日记里写“我很擅长Java”。
6.不要混淆工作和职业。
不要把工作和职业混为一谈,它们不是一回事。
对我来说,写软件是一项伟大的工作,但它只是一个可以接受或更好的职业。
在接受别人的建议时,你还应该注意对方是否提到了关于工作或职业的建议。如果把两者混为一谈,这个建议就没多大意义了。
7.学习的顺序不重要。
刚开始的时候,你经常会得到不同的建议,比如先学什么语言或技术,但这并不重要。
如果你没有按老规矩来,而是开始了自己的路,不代表你基础工作没做好,也不代表你不好。
因为如果一个东西真的很重要,你迟早会找到它,重新学习。
8.你越优秀,你就越与众不同。
程序员早期的专业培训(如博文、大学课程、书籍)就像流水线一样,努力培养你各方面的基础能力。
而且新手很容易误以为一个总工程师需要很多技能,每个技能等级都一定很高,但事实并非如此。
你可以通过编写一个相当简单的代码并详细描述它来获得尊重,就像帕特里克·麦肯齐在Bingo Card Creator中所做的那样,或者通过编写一些真正有利可图的东西来获得尊重。
除了基本能力,这几条路没什么共同点。
这就是为什么在求职时问这样的问题是愚蠢的:“我是一名有15年工作经验的软件工程师。我平时工资多少?”
15年是这么长的时间,你要形成和别人不一样的优势。你写过书吗?有没有搞过大规模盈利的项目?你集成了一个有趣的开源项目吗?这15年你都做了些什么?
当然,这不仅仅是工资的问题。你可以问:“我是一个有15年经验的软件工程师,这意味着我有能力领导这个项目,对吗?”当然,答案是“可能”。下一个问题是“15年你做了什么?”
9.从实践中学习
我不会建议人们从一开始就学习软件设计的深层原理,因为如果你试图将它们作为纯理论来学习,你几乎肯定会出错。
对于初学者来说,首先应该学会用一些实用的语言来构建一个可用的软件。不管是哪种语言,只有犯一些真正的错误,才能在错误中解决问题。
那么你可以这样循环:练习,犯错,学习理论,改正错误。
当然,这并不意味着你先学了理论就永远变差了,只是需要一些时间来正确运用你所学的知识。
10.什么技术重要?
想做几十年程序员,不仅要学习各种技术技能,还要学习各种非技术技能。
比如“学习至少一门函数式编程语言”,就像钢琴家“学习演奏莫扎特的钢琴曲”一样必要,但同时学习一些编程中涉及的边缘技术,会为你培养额外的洞察力。
1.向其他领域学习。
如果我们的行业还年轻,意味着什么?这意味着我们还在研究基本原理。
可以从其他领域学到很多东西。我曾经写过一本书,讲的是如何窃取艺术家的练习方法,正是因为艺术和音乐是古老的学科,比计算机领先了几千年。
所以,如果你遇到问题,你可以考虑一下其他领域的人会怎么处理。
例如,Atul Gawande的“清单宣言”讲述了飞行员、摩天大楼建造者和医生处理问题的不同方式。这些都是好方法。
12.不要重复造轮子。
众所周知,如果艺术家反复画一幅静物,音乐家反复练一首曲子,就会越来越熟练,但程序员就不一样了。
程序员中有一句话,“不要重复造轮子。”我们的工作就是想办法让计算机做所有的重复性工作,这样我们就只能做新的工作了。
你可以尝试重新发明轮子,也可以故意用一种“糟糕”的方式写代码,看看会发生什么。总而言之,你需要真正擅长一些不寻常的事情。
13.去做吧。
我一直在给你推荐非技术方面的建议,而不是那些充斥着技术专家的论坛,充斥着最近转向程序员的人的偏执热情。
如果你写程序,你就是程序员,或者软件工程师,或者随便你怎么称呼。
只要你坚持写下去,无论多少年,你总能成为一名程序员。反正坚持下来就合格了,这才是最重要的。
那么,看完之后,你对程序员行业有什么新的认识吗?
除了文字版,作者还在YouTube上传了视频版,链接放在评论里。感兴趣的朋友可以自己拍~
https://code fol . io/posts/the-四十岁程序员/#disqus_thread
视频链接:
https://www.youtube.com/watch?五世=UPkJGU7Itb0
参考链接:
https://www.linkedin.cn/incareer/in/noahgibbs