读《软技能2:软件开发者职业生涯指南》的感悟
对程序员职业生涯的思考:职业生涯是一个人一生所有与职业相连的行为与活动以及相关的态度、价值观、愿望等连续性经历的过程,也是一个人一生中职业、职位的变迁及职业目标实现的过程。职业生涯规划与发展对个人的意义是什么呢?它能有助于帮助我们发掘自身潜力,增强个人实力。也可以增强发展的目的性与计划性,提高成功的机会。有利于提升应对竞争的能力。我们要想在当今社会激烈的竞争中脱颖而出并保持不败之地,就必须为自己设计好的职业生涯规划。未雨绸缪,有了清晰的认知与明确的目标之后,再付诸于实践,最终能实现更好的效果。
这本书主要围绕软件开发从业者职业生涯的发展历程,描述软件开发者在职场中需要具备的各种“软技能”-如何入行成为软件开发者,如何学会第一门编程语言,如何写求职简历,如何准备面试,如何选择工作岗位,如何选择技术方向,如何拓展技术技能,如何与团队和领导融洽相处,如何以著书立说方式为自己在业界赢得赞誉等等。这是一本写给软件开发者的,同时也是一本关于管理个人职业生涯以及如何获得成功的书,对软件开发行业的各类从业者做好职业发展规划都很有帮助。
这本书总共五个章节:
1.入行成为软件开发者。
关于第一章我想说的是,要想成为一名软件开发人员,你需要学习一门语言,具备需要的技术技能。很多人问:“我想成为一名程序员,那么我该怎么入行呢?”,成为程序员的方式有三种:
第一种:通过考研转行成为软件开发者。这种方式的优点是你可以获得高学历,目前仍然有许多的公司只招聘统招本科及以上学历,我在找工作的时候就是如此。并且你能够体系化的学习计算机相关的知识,获得实习以及其他的机会。劣势是你需要花费两年半到三年的时间去读研,有时间成本。在这段时间,你不可能作为一个全职的软件开发者,获得任何能够写到简历里的实际工作经验,两年多的时间可能会发生大量的事情。需要花费一定的金钱成本。还有一些容易让人分心的事情,比如宿舍里打游戏、看小说等。
第二种:参加培训班成为软件开发者。目前市面上有很多的培训班,比如黑马程序员、尚硅谷、千锋教育等。这些培训班都能在短期内让你成为一名软件开发人员,在这里学习的时间可以让你获得相当于数年工作的经验。培训班大概是半年时间,学费+生活费大概三四万。培训完成之后大概率的能找到工作,当然也有少数找不到工作的人。在培训班的学习氛围非常好,可以让你用“浸入式学习”的方式聚精会神地研究变成技艺。劣势就是你无法获得好的学历,不能系统的学习计算机相关的知识,需要后期通过自学补上。你还得先花费一定的成本。
第三种:通过自学的方式成为软件开发者。自学编程的优点是你可以灵活控制自己的学习时间,并且成本很低。你可以掌握如何学习的方法。缺点就是你不知道自己该先学什么,从何学起,如何判断自己的学习成果。有可能你花费了很长的时间去学习某个知识点,但是这个知识点可能对找工作毫无帮助。你很容易失去动力,正所谓三分热度,当你的新鲜感消失的时候,你可能会觉得做编程索然无味。
想好了通过什么方式成为软件开发者,那么你下一步就需要知道你想学什么编程语言。当前比较火的就是前端JavaScript、后端Java、Phython等。选择编程语言你需要考虑当前与未来的就业前景,你感兴趣的技术(如果你对某种技术更感兴趣,你从学习某一种技术开始切入,可能会更容易。),语言的难度级别(不同的语言学习的成本不同)、你可以用的资源(比如你学习遇到一些难题,能通过哪些方式解决。还有市面上哪些学习资源会比较多。)
最后就是拓展自己的技术技能,这本书介绍了一种学习方法的基础信息,叫做“十步学习法”,它的基本思想很简单,从本质上讲,你要先确定你想要学习什么,即明确学习的范围。针对你确定的学习主题,你需要获取足够多的信息以纵览全局;然后,把主题聚焦到一个足够小的范围之内,这样你才能专心致志的去专研,心无旁骛的去研修。然后确定学习目标,开始着手收集学习资源。根据你的学习计划,开始学习关于你的主题的每一个模块。最后,把你学到的东西教给别人。
学习一门技术技能,首先要明确就是用它能帮助你做什么。如果你对这项技能没有直接的需求,你甚至会质疑“我为什么要学它”。其次如何开始。最后你需要知道只有20%是最有效的,也就是将80%或更多的时间用在关于一项技术的20%信息。经常阅读一些行业大牛写的东西,有时候听取牛人对某一个主题的见解就能让你深刻领悟,而一个人冥思苦想却让自己时时陷入死胡同。多实践,一门技术,如果你不实践,不使用它,那么你很快就会忘记它。所以要经常实践。
2.找到一份工作。
如果你是通过考研成为一名软件开发者,那么你可以通过校招的方式找到实习机会;如果你是通过培训班的方式或者自学的方式成为软件开发者,那么你可以通过自己获得的经验以及技能找到一份工作。
这本书中的一些方式方法更多的是国外的方式,我觉得可以借鉴一部分,比如每一位软件开发者都应该开设自己的博客。不管你是身经百战还是初出茅庐,你都应该分享你正在学习的内容,在软件开发领域选择一个专业方向然后有所著述。 建立人脉,如果你没有经验又想得到一个机会,最好的办法莫过于让那个能够给予你机会的人了解并且喜欢你,或者他熟悉的某个人愿意为你提供方便,当然如果你在自己的人脉网络里很有声望,那么一旦他们听说你在找工作,他们就一定会跳到你身边,试图把你拉进他们的团队里。因此你需要投入时间与资源来编织一张强大的人脉网络。
关于如何写简历我之前分享过一篇文章:juejin.cn/post/710627… 大家可以去看一看。
关于面试过程:目前很多公司在招聘开发者的时候,都会用电话面试的方式过滤出他们想要参加面试的所有潜在人选,然后再安排真正的面试,以此来节省成本。电话面试通常问的都是技术性问题,你可能会被电话面试两次,一次是技术面试,另一次是非技术面试。电话面试的目的不是决定是否给予你工作机会,而是决定要不要把你淘汰出局。目前面试你需要掌握一些常见的面试问题还要掌握一些源码、算法、数据结构。
关于薪酬谈判:首先要考虑谈判的相对定位,如果你谈判时的地位越高,你就越能争取到好的谈判结果。这家公司之所以要招聘你,要的就是你独特的才华、能力或者声望--而且你已经有了一份非常好的高薪职位,甚至手握好几份工作邀约。在找到另外一份工作之前我建议你不要辞职,哪怕你现在的工作再怎么糟糕。如果你的名气越大,你在谈判中的优势就越明显。
如何开始转行:从当前从事的工作入手实现转行,通过编程来帮助自己有效完成工作,或者开发某种工具来帮助每个人有效完成工作。或者利用你现有行业背景知识,为一家在该行业内开发软件的软件公司提供宝贵的领域专业知识。从底层开始做起,如果你正在转行从事软件开发工作,你需要可以从底层开始做起的决心和意愿,这样并不会很久,很快你就会升上去。
3.关于软件开发你需要知道些什么。
编程语言:C、C++、C#、Java、Python、Ruby、JavaScript、Objective-C、Swift、Go、
Web开发:Web开发就是要创建可以在Web浏览器中运行的应用程序。使用HTML、JavaScript、CSS构建页面。
移动开发:移动开发是在任何一种移动设备进行任何形式的开发。iOS、Android、其他。跨平台框架与工具,选择跨平台的框架解决方案时,主要的考虑事项包含如下几个:你应该使用什么样的编程语言?你是想采用原生开发,还是混合开发方式,你希望自己的代码支持多少个平台?你是否可以代码复用?
后端开发:所有不涉及编写生成用户界面代码的开发工作。通常他们需要处理应用程序中的业务逻辑,将数据输入前端并从前端检索数据。
DBA:数据库管理员,大多数情况下,DBA负责建立、维护、保护、优化和监控数据库,有时还可能负责建立数据库模式或者编写存储过程。DBA从本质上讲偏向于运维的工作,所以实际上他们并不需要做太多的有关创建数据库表和编写任何类型的数据库代码方面的工作。另外一些DBA除了要完成数据库运维的工作,更像是一名数据库程序员。
源代码控制:版本控制,是指跟踪软件项目里不同版本的文件和源代码的一种方法。能够协调多个开发者的工作,使他们能够同时处理相同的文件集合。工具有git、svn。
持续集成CI持续部署CD。
调试:软件开发者会花费大量的时间用于调试代码。因此调试是一项很关键的技术。
代码维护:维护代码就需要知道如何编写更容易维护的代码。相辅相成。
4.软件开发者的日常。
软件开发者的日常就是和测试人员进行沟通修复bug、和后端联调接口、与产品进行业务沟通等。作为团队中的一员,你每天都需要和团队中的其他人进行工作,因此我们应该成为高效能的沟通者,对团队负责,提高团队整体的作战能力。团队一荣俱荣,一损俱损,那么团队中每个成员的最大利益就等同于团队的最大利益。同时如果团队中有成员阻碍了团队去实现目标,不能袖手旁观,需要坦诚的说出自己的想法,别不把团队(自己)的事情放在心上。
软件开发者如何获得晋升和加薪呢?主动做更多的事情,远远超过人们对你的的要求,必须要走出去,主动让事情发生,而不是等待事情发生在你身上。投资对自己的教育,通过读更多的书,阅读技术书籍,或者买一些视频进行观看,参加研讨会或者行业会议等让自己更有价值和更有成效。让自己在公司之外更有价值,打造自己的个人品牌。成为资产,让公司通过你赚到更多的钱。
5.推进你的职业发展。
最后,如何推进你的职业发展,这本书中写到的方法有,建立声望、社交与人脉、创建博客、演讲和参加会议、做自由职业和创业、专业化等。每种方式都有其中的价值,比如说如果你拥有一个庞大而有价值的人脉网络,那么你在找工作的时候不需要挨个投递简历就能找到一份工作。创建博客分享自己的想法和经验,日复一日,人们开始阅读你所写的东西,你很有可能获得工作的机会或者其他的机会。
每个人都有自己的职业发展道路,最终如何选择全凭自己的思考。选对了你将成为造物主,世界将因你而精彩。选择什么样的道路,想要投身于哪个领域,需要深思熟虑,好好思考,不要随便的把别人的道路当作是自己的道路。
我的感悟
每个人都有自己选择的生活方式,有的人选择躺平,有的人选择持续努力,不同的人最后的结果也是各不相同。坚持自己的选择,努力去做到,最终一定能够获得很多。学无止境,编程需要坚持实践,保持输出需要坚持阅读。坚定自己的梦想,终有一日,必将实现,必将获得丰厚的回报。