草庐IT

别转管理,十年程序员老鸟给新手的几条忠告

runoob 2023-03-28 原文

本文转载自51CTO(ID:weixin51cto),作者:熊小妹



在 2006 年,我开始了编程工作。当意识到来到了十年这个重要的时间关口时,我觉得有必要回顾一下这十年间所犯下的错误,做一做经验总结,并且给正在这个职业上奋斗的人们提出我的一些忠告。开发行业变化得很快,我无法肯定在未来十年里这些建议是否一直有效,但相信我的话对你们是肯定有所帮助的,不管是刚开始工作的新手还是工作几年的老手。


要坚持使用一个开发平台,框架或语言


在过去十年间,我所犯的最大错误是:几乎每次我换工作时也转换了开发平台。


我的经历从 Java 企业开发开始,到嵌入式 C 编程,到用 VB、C# 和 C++ 开发 Windows 桌面应用程序,然后用 Objective-C 写 iOS 应用程序,到用 NDK 编写 Android 库,最后到写 Android 应用。


这个职业经历听起来令人敬畏,但实际上雇主并不关心。雇主们并不会重点关注你拥有 10 年各式各样的开发经验,但如果他们看到你没有足够的 Android 应用开发经验,你就不可能获得一个 Android 开发的工作。


转换平台会对你的简历产生巨大的负面影响。对于一个雇主来说,实际上他没办法通过简历来验证你是不是某一特定开发领域的专家,为你付出大量资金是否合理。


大多数公司都不关心你的过去,技术面试会更加重要。这就是为什么很多经历尚浅但专业对口的开发者可以找到工作的原因。


那么我们如何适应市场的变化呢?只要你不停地敲代码,你就能自然而然地适应市场,但你也需要投入一些时间在新技能上,应在空闲时抽出时间来学习新技能,而且你也要降低期望薪水。你需要后退一步,才能前进两步。


一旦你找到一个让你觉得舒服的平台,框架或语言,就应该坚持下去。从长远看,你期望的薪水和你的工作能力都会比频繁跳槽来得更高。找到最需要你的专属技能的好公司,然后踏实地在那里工作。我知道这听起来很简单,但我花了很多年才意识到这点。

不要为高工资追求管理角色


以前我总是以为那些穿着西装,作行政决策的管理者拿的薪水高得令人神往。虽然在一些情况下这没错,但这所占比例很小,经验丰富的开发者的薪金一般会比中等管理者更好。


在我早期的职业生涯中,我一直想进入项目管理。我自修了管理硕士,在那里我学到了很多有趣的东西。最后,我在一家西班牙公司作了一阵开发经理,然而我意识到这不并适合我。


在做开发者的时候,我总是感到公司缺乏企业文化,尤其是缺少技术因素的企业文化。然而在做了管理者之后,不仅编程水平无法提高,而且在企业文化的孤独感甚至更加强烈。最终当我离开这个岗位重归技术开发时,我终于开始重新欣赏我的开发工作。


如果你对敲代码感到厌烦了,那么转成管理岗并不是解决方案,更好的办法是横向移动,换一个部门,换一家公司,或者是旅行,甚至可以选择在国外工作来解放你的思想,在全世界有许多技术中心,那里对开发者的要求很高,这能帮助你打开眼界。

休息一段时间


我从来没有"失业",直到去年。在十年后,我感到需要休息一下来"重构"我的职业生涯,事实证明这是我所作出的最好的决定之一。


我休息了 5 个月,辞掉工作,是自愿失业。我能感觉到身边的每个人都在担心我的职业生涯即将结束,但所发生的一切恰恰相反。


经过十年不停地跳槽和匆匆忙忙地完成各种带薪年假,我终于体会到"失业"是如此"幸福"。事实上,在我们的职业生涯中,"幸福感"确实是最应该追求的东西。


从我的情况来说,这四年来,我一直想坐下来学习德语,但从来没有时间去做。而在这 5 个月中,我参加了德语强化班,一天 3 小时,让我的德语水平从 A2 升到 B2。


重新找回工作是很容易的,比预期的要容易得多。所以,如果你觉得自己需要的话,不要害怕一个长时间的休假。简历中的一段空白对于开发者来说不会被人认为有错。

当然,如果你读了这篇文章后,无论你是否准备来个长期休假,请一定要遵循我下面的这几条忠告:


1、ABC: 总是编码(Always be coding)


即使是休息也不要停止编程,在我 5 个月的休息期间,我做了一个个人项目,一个使用 discogs.com API 的 Android 应用。这是一个便捷的个人应用,帮我从数据表中添加和删除记录,而且我也想借此总结和更新一下我的开发技巧。


多亏了这个小项目,让我能够自信地应对工作面试。我尝试了许多新的流行类库和开发模式,这些正在我今天的工作中成功有效的应用着。


我真希望早点开始做这件事。我们的开发工作往往是重复的,时间越长,积累的编程习惯越难以更改,也让我们自我提高的空间越来越少。


从长远来看,拥有个人项目、阅读、写博客和参加访谈都会有助于你成为一个更好的开发人员。只要你觉得有意思,就把你的代码推到 GitHub,并把你的经验与社区分享。

2、成为开发者社区的一员


当我还在大学的时候,我总是懒得参加各种社团和俱乐部活动。当我找到我的第一份开发工作时,最不乐意做的也是和其他开发者闲聊闲逛。


但是我错了。


同行聚会和进入开发群是很有趣的事情,是结识开发者伙伴的好地方。如果你想在这个行业里做到最好,就尽量不要消极被动。与坐在你旁边的人交谈,提供你的帮助,分享你的经验。每个人都喜欢谈论自己的经历,更何况你也许会遇到很多潜在的雇主。

在那里你会碰到许多需要教练的初学者团体,你可以指导新手,给他们提供练手的机会,甚至赞助活动。


当然,要学习别人的开发技巧并且勇于实践,要热情地欢迎不同意见的人讲话,勇敢地听取他们的意见。


3、不要在招聘网站上求职


这是我最后的"智慧结晶":不要申请那些在网站上张贴的工作职位。

招聘网站的背后是复杂的人力资源流程、候选人跟踪系统、滥发个人简历和混乱的沟通,这也是许多公司找不到人才而要依靠猎头公司的几个重要原因。


优秀的人才应该跳过这些。网络是寻找人才之路,更多地关注当地的社区消息,当有人离开一个重要的职位,当一个有意思的公司得到了融资,或者某个企业人事变动正在招聘人时,你都会获得最新的第一手消息。


你也能通过网络社交得知哪些公司的福利比较好,各公司的大多数开发者都会真诚对待你,他们会告诉你这些公司的架构是否老旧,经理是不是人品够好,甚至工资待遇怎么样。


如果你看到一个有意向的工作机会,首先看看你的社交网,看看你的用户组或 LinkedIn 朋友圈,是否有人已经在那里工作了,或者问他们是否认识某些人。然后直接与他们联系,与那个公司的 CTO、招聘经理或其他开发人员直接交谈。


猎头是好的,但不要依赖他们。他们的任务只是帮助企业填上一个职位的空缺,因为他们并不为你工作。如果他们推荐的职位的确非常适合你所寻找的工作,那么你就去做,如果觉得不适合,那么就告诉他们:谢谢,我不去。


作者介绍:Miquel Beltran
现任Good Hood GmbH首席Android工程师谷歌柏林开发者团队领袖
原文标题:Mistakes I Made(as a developer)
文章翻译:陈小美
原文链接:https://medium.com/@Miqubel/mistakes-i-made-d2e1dc4e820a#.zcmzaiz67

有关别转管理,十年程序员老鸟给新手的几条忠告的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

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

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

  3. 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

  4. 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中编写命令行实用程序

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

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

  6. 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

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

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

  8. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  9. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  10. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

随机推荐