草庐IT

一个中年程序员的职业规划的一点思考

飞机云_ 2023-03-28 原文

To do something well you have to like it. 这点我深信不疑。

之前有个帖子,说计算机领域里面哪本书对你影响最深?

相比较csapp 恐龙书之类的技术类书籍,我几乎毫不犹豫的可以说,《黑客与画家》这本随笔对我的影响是最深的。

这本书给我深深地种下了两个念头:

  • 一是coding之于程序员,就像painting之于画家。这是一个脑力创造活动,是一个可以达到媲美艺术创作境界的工作。
  • 二是让自己变富的最好的方法是创业:与其让自己有条不紊的一年打工挣8万美金,不如高强度的把工作压缩到几年内挣几百万美金。现在的时代和作者所处的互联网泡沫时期不一样,创业变得越来越难。但是这个将工作更高强度的压缩的想法我还是赞同的。所以现在让我在996和955里面选择,除非955在业余时间有非常确定的提升计划,我觉得996多挣点钱其实挺不错的。

由于各种各样的原因,我自己的工作方向一直是以被动选择为主。

中国的教育体系里面,除了之前让自己吃了大亏的“挫折教育”缺失了以外,我同时觉得 ”探究自己喜欢做的工作“这方面的教育是缺失的。

 

开头的那些年,我还能让自己以可以对IT技术理解的更深入为理由,说服自己努力的去做不喜欢的工作。

但是随着基础知识的完善,对原来觉得没学好,觉得神秘的OS、compiler、 体系结构、内核这些知识的愈发理解,以及业务开展的越来越深入,之前的这些努力完成不喜欢工作的理由变得越来越稀薄:在工作中学到的知识,从原来很基础很重要的东西,更多变成了对自己不喜欢的某些方面的业务的深度细节挖掘,从内心来讲,掌握这些细节也许可以让自己在不喜欢的方向上多挣点钱,但是从长远来看,没什么太大的意义。

另一方面,职业晋升看中的东西,从基础的技术能力,更多变成了需要对团队对业务的认真和负责地投入,更变成需要花费责任心和精力去跟项目,去抓细节,去抓进度。

对团队对公司来说,这些东西当然很重要,比了解几个技术点重要得多。但对个人来说,投入的这些东西性价比也不高。

 

自己现在能力是个什么状态?

很惭愧,我没有成为自己曾经期许中的大神。

从技术角度来说,现在的我大概处于刚开始对软件开发活动有了比较成熟理解的一个阶段。就像刚出美术学院的一个艺术生,临摹了一堆作品,对各种美术技法有所理解,开始可以创作自己的作品的阶段。虽然我是科班专业出身,我自己经常觉得自己现在的这个阶段,才真正有点像是一个合格的本科毕业生,将那些知识真正的消化理解了,做好去工作的准备。虽然不是大神,但我可以很负责的说,我是一个合格的软件工程师:我做到了当年zqh说的 —— 每写一句代码,能理解它从一行代码变成最后在硬件器件上的电信号的中间的每一个过程。

现在的我不再想深入探究各种软件系统的深入细节,更多会思考怎么样把这些系统用好。我手握着键盘,急切的想去创作。业务价值之于我,开始大于技术价值。

 

时间来到了32岁,越发觉得自己工作中手头做的事情让自己难受,”这不是我喜欢做的方向“,这个念头越来越折磨着自己。

但很尴尬的是,相对来说以前深耕的业务方向,反而是不想继续做的方向。而去做其他喜欢的方向,都有点不同程度的转行的意味。

虽然我相信以自己现在的基础,不管是转哪个方向,都会很快的上手并且开始产出(当然要达到精通需要时间和大量付出),但是转行就是转行,没有经验就是没有经验。

好在也算是在“大厂”干过的人了,马洛斯需求里面的“社会认同”这一点现在不会太让自己焦虑,这部分的自信心我是有的。

真正在折磨自己的,是马洛斯需求里面的“自我实现”的部分。

曾经又被一个“毒鸡汤”念头植入过,

对于我来说,自我实现有两条路,一是创业,作为主要创作人员做出一个对社会有用的能挣钱的产品。二是完成一个融合自己艺术幻想的软件作品,达到自己满意。

现在看起来这两条在现在的工作岗位上都没有办法实现了。

996恐怖的地方,是它买走你的精力,让你没有那么多时间思考和学习:本职工作做着自己不喜欢的事情,不多得休息时间就更像补偿性的让自己的精神力恢复的过程,很难去投入进学习和精进自己的事情,在有了孩子以后更是如此。

最近在招聘网站上看了下,有可能往这上面说的方向去的工作,都没有办法维持现在的收入——没办法不是一线城市——另外毕竟也是转了方向的。

想拿更高的收入,只有在现有的技术栈上继续职业生涯才有可能。

我一度感觉自己好像《白箱》里站在蛋糕师还是制作管理工作十字路口的本田san。是选择继续做螺丝钉还是放弃稳定的工作去追求一下自己"喜欢"的东西?

 

这着实让我迷茫了好一阵,也和家里人有了不少的争辩。“是选择前程,还是选择猥亵?”

迷茫的是,自己降低收入跑去追求所谓的“自我实现”,这是不是对家庭的不负责任?

更迷茫的是,这个牺牲了很多东西去追求所谓的自我实现,真的是自己想要的方向吗:“自己非做这个不可吗?”如果做了一阵又后悔了,又该怎么办?如果真是这样,这会是个不可饶恕的错误。

这时候,黑客与画家的作者Paul Gramham的博客上的Essay再次给了我方向和力量。

里面提到的一些观点让我下定了决心:

  • Finding work you love does usually require discipline.找到自己喜欢的事,是需要复出大量的努力的,甚至比把这件事做好需要复出的更多。
  • Sometimes jumping from one sort of work to another is a sign of energy, and sometimes it's a sign of laziness. Are you dropping out, or boldly carving a new path? You often can't tell yourself. 有时候换方向有可能是积极的懒惰,而不是积极的改变。身在其中,很难分辨。
  • Is there some test you can use to keep yourself honest?如何让自己对自己的内心坦诚?
    • One is to try to do a good job at whatever you're doing, even if you don't like it. 一是做好自己不喜欢的本职工作,至少这样说明自己不是战术上的懒惰。
    • Another test you can use is: always produce. As long as you're producing, you'll know you're not merely using the hazy vision of the grand novel you plan to write one day as an opiate. 二是always produce。真正的着手去做,这样看着坚持自己做的东西的真实成色,才不会把一个虚无缥缈的“幻想”当作自己的精神鸦片。
  • 转行的两种方式:
    • The organic route: as you become more eminent, gradually to increase the parts of your job that you like at the expense of those you don't. 赚足够多的钱之后或者优秀到轻松从事不喜欢的工作就能赚够钱,再有足够的时间来做喜欢的事。
    • The two-job route: to work at things you don't like to get money to work on things you do. 业余兼顾法,做不喜欢的工作赚钱来供养自己业余时间做喜欢的事情。
       

一直折磨着自己的问题,果然贤者早已经深入的思考过了,醍醐灌顶。

我觉得起码自己现在无法回答的第二个问题,“真的喜欢吗”,可以通过 always produce来证实。所以我决定,接下来的半年到一年,把业余时间,投入进自己喜欢的事情来尝试下,来证明给自己看是不是真的热爱。寻找自己喜欢的东西是很难的,需要付出996之上的辛苦,这也是必须的。

至于这是不是不为家庭负责的自私,我想也许可以慢慢给家里人澄清:一方面我也没有大量负债(非一线城市),就算是换个方向也不是拿着家里的钱去用爱发电,不是家里蹲。另一方面就像Paul Graham说的,一个热爱自己工作并努力的父亲,也许比提供更多金钱但不喜欢自己的工作的父亲更能给给孩子梳理好的榜样吧。

有关一个中年程序员的职业规划的一点思考的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  6. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  7. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  8. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

随机推荐