我的职业生涯的最初几年是在紧张的学习中度过的。
软件工程师的工作不好做,我就遭遇了这一现实,因此不得不努力掌握很多我根本都不知道我需要掌握的技能。
在很多开发者工作的最初几年,我以导师的身份,对他们进行过辅导。我自己在这方面经历颇丰,我的一些同事也有相应经历。所以,基于这些经验,我撰写了本文,希望帮助那些需要帮助的人。
本文涵盖以下内容:
在你的软件工程师职业生涯开启的那一刻,你不得不面对一个不争的事实:面试真操蛋。
面试对于身处其中的每个人都是梦魇。我既做过面试官也做过应聘者,我可以作证,面试是一件很浪费时间的事情,压力超级大而且并不能很好地反映未来工作表现。尽管如此,面试还是必要之恶,你最好带着精心修饰的简历好好准备。
如果你正在考虑选择软件工程师行业,请确保掌握那些编程面试中最常问的问题,比如 FizzBuzz:
编程打印从 1 到 100 的数字。如果数字是 3 的整数倍,打印 Fizz;如果数字是 5 的整数倍,打印 Buzz;如果数字既是 3 的倍数又是 5 的倍数,打印 FizzBuzz。(来源:Coding Horror)
听起来足够简单,对吧?
然而,很大一部分应聘者都没能通过这道简单的测试,更不用说其他的复杂衍生版本了。
我个人曾经眼睁睁看到过很多高级岗位的候选人,在可以自由上网的情况下,没能解出这道题目。所以,如果你的简历上展示了某种编程语言,你得确保自己可以用这种语言解决 FizzBuzz 问题。否则,你就只是在浪费大家的时间,包括你自己的时间。
当然了,要从面试中胜出,你还需要知道远多于 FizzBuzz 的知识。你同时需要确保你知道:
在你的职业生涯伊始,你需要格外重视这些问题,因为你没有经验可以证明你的工作能力。对于在准备面试的人,我总是推荐两种资源:
有几件事情是你可以提前准备的,它将赋予你特殊的优势。
首先,学会向他人展示你的经验成果。用连贯而引人入胜的简述总结你的简历内容,就像电梯演讲一样。
另外,熟知你自己的简历!这听起来很傻,但是我却看到过很多应聘者挣扎着说不清楚他们简历上的某个特定细节。你应该有能力回答有关你简历上的经历的任何问题,并讲清楚这一经历如何让你更加适合应聘的岗位。
其次,展示你在 GitHub(或者其他代码仓库)的示例代码。
眼见为实。有机会亲自看到你的代码的面试官都会忍不住想看一眼的。另外,这也表明你对于版本控制系统是有一定理解的。
这些示例代码不必太复杂,但是要整洁并展示良好的编程习惯。这是你展示无现场编程面试的时间压力下的编程习惯的好机会。
一旦你完成了以上两步,就需要考虑参与开源项目了。这将展示你可以在已有代码基础上工作,并且可以和其他程序员协同。
这将是你在尚未真正身处工业环境时最接近工业环境编程的了。这是迄今为止最难的也是最耗时间的项目,所以如果没有完成我前面提到的低难度任务,先不要做这个。
在匆匆忙忙、紧紧张张的找工作过程中,很多应聘者忘记了面试是个双向通道。在公司试图搞清楚你是否是这个岗位的合适人选的时候,你也应该搞清楚这个公司是不是适合你。
确保自己要提出以下问题中的几个,就算是邮件面试也要提。要记得,大多数情况下,公司都不会像遵守最佳工程实践一样给员工清晰的定位,所以要逐字逐句的阅读。
以下是一些你可以提出的问题:
了解特定岗位的需求是很重要的,因为软件工程师岗位千差万别。比如,你可能需要长期维护服务器或者直接和客户沟通。
红色警报:“我不太确定”→意味着面试你的人不和你在一个团队,或者他们没有想清楚为什么要聘用你。
理想状况下,要检测代码质量,需要综合使用单元测试、人工测试和自动测试。
红色警报:“哈哈,我们写的代码没有 bug。”→这么回答的人,就是那些写出 bug 的家伙。
版本控制系统(Version control systems)对团队协作是极其有用的,在专业团队配置中,没有任何理由不采用版本控制系统。
红色警报 No.1:“呃……什么是版本控制系统?”→赶紧跑,跑得越远越好。
红色警报 No.2:“< insert obscure or custom VCS > ”→ 这意味着他们基本上已经落伍了,很长时间没有更新过他们的基础设施了。
Peer reviews,或者在你的代码并入代码库前请其他人审阅你的代码,是检查低级错误的高效方式,也是在职业生涯初期的重要的训练机会。
红色警报:“我们相互信任!”→很可能高级工程师们对自身的代码十分“护食”,也不乐于接受反馈。
随着新科技的出现、成熟和过时的速度越来越快,身为软件工程师就意味着要持续学习。因此,很多公司都有相应的培训预算,支持员工参加大学课程、在线课程、会议或室内讲座。
红色警报: “你指的是下班后在网上自学吗?”→公司要么是现金流紧张,要么就是将开发者视为可替代品而非长期投资。
不论实际细节如何,流程对软件工程都是至关重要的。关于什么是最优软件开发流程的细节还存在激烈的争论,但是,仅仅存在一种商定的工作方式就能最大限度地减少混乱并确保所有人都在同一个频道上。
红色警报:“我们的流程是受自由爵士启发而来的。”→很可能整个部门都是在战火纷飞的状态,没有清晰目标的情况下应对一个又一个的突发紧急状况。
技术债是代码库中的过时技术和糙快猛解决方案的长期累积造成的。强调技术债对于代码库的长期健康是重要的,并且应该持续的改进。
红色预警:“我们特别关注新功能。”→他们的代码库乱成一团,或者马上就会乱成一团。
企业文化可能是十分虚无的概念,但是开放式工位 VS 格子间这样的小细节都可以极大地影响到你和同事的日常接触。这里并没有通用的红色预警,但是要确保,他们回答的内容是你可以连续数年下来每周在其中工作 40+ 小时的环境。
在这个阶段,如果你在面试中表现不错,并且也喜欢面试官回答你问题的方式,你基本确定被录用了。
恭喜恭喜。你终于成为一名正式的工程师了。
然后呢?是时候重新学习这些关于编码和工作的繁文缛节了。因为我们是程序员,所以就从代码开始讨论吧。
良好的工业级代码具备以下特性:
既然你已经知道了什么是良好的工业级代码:
这可能会令你大吃一惊,不过大部分时间你都不是在写新的代码,而是在
所以写代码以外的技能对于你的职业生涯相当重要。
因为你要在在交流、研究和多任务处理上花费很多时间,所以你需要一些工具,帮你让一切保持井井有条。
一言以蔽之:一直用。
详细说明:99% 的时间,你都不应该重复造轮子。在大多数软件工程岗位中,重新撰写某一种排序算法都是彻头彻尾的浪费时间。这并不是说,你不必知道所用的算法和数据结构如何运行。知晓这些内容,将有助于你决定何时采用什么。
作为一位高效的软件工程师,你需要理解你手头当下可以用的库。大多数流行编程语言的标准库都是特别有用并且远超你想象的。此外,代码库还可以使用其他专门的库。你需要熟读其文档,并知道何时使用。
如果使用额外的库可以节省时间,你也不必为此战战兢兢。但是,您需要确保选择工业级别的优秀的库。一个优秀的库应当具备以下特点:
你需要学习那些是你的日常工作更加出色的技能,此外,你也需要持续提升你的技能并学习新的技能,这样才能为你自己不断创造新的职业机会。
学习机会多如牛毛,其中很多都是触手可及的:
我希望这篇文章为你提供了软件工程师职业生涯伊始需要的知识,并提供了激动人心的旅程中表现卓越所需要的工具。
原文链接:
https://medium.freecodecamp.org/a-software-engineering-survival-guide-fe3eafb47166
领取专属 10元无门槛券
私享最新 技术干货