软件工程师生计攻略:面试预备、作业阅历和实用东西

编者按:软件工程师是令人羡慕的作业。可是怎样才干拿到这份作业?又怎样才干做好这份作业呢?具有相关阅历的 Valeri Alexiev 供给了相关主张和东西。其间包含了怎样预备面试、怎样以软件工程师的身份作业以及怎样持续改善方面的阅历之谈。

我刚开端作业的头几年是严重学习的时刻。

我得面临现实,成为软件工程师需求有许多技术,这些我之前都不知道。回忆过去,明显学会那些东西是很好的。

所以我就依据自己及其他人的阅历写了这篇攻略来协助入行的新人。

本文将掩盖以下内容:

  1. 怎样极力做好面试
  2. 怎样在软件工程师的人物中生计(及开展)
  3. 考虑持续改善时能够参阅的资源

面试

当你开端软件工程作业生涯时,你得面临一个无可争议的现实。面试很厌恶。

参与其间的每个人都觉得很厌恶。既被人面试过又面试过他人的我能够证明,面试是一项极端耗时、极端有压力的作业,而且面试其实并不是将来作业体现一个的好的指示器。但不管怎样,这都是一个必要之恶,你和你的简历最好仍是做好预备为妥。

做好战斗预备

假如你考虑做软件进程,保证了解一些最常见的VWIN首页面试问题,比方“FizzBuzz”:

写一个程序打印从 1 到 100 的数字。可是假如数字是 3 的倍数的话则打印“Fizz”,假如数字是 5 的倍数则打印“Buzz”。假如一起是 3 和 5 的倍数则打印“FizzBuzz”。

来自 Coding Horror

听起来很简略,是吧?

好吧,但其实绝大部分面试者都没能经过这一简略的测验,且不说更杂乱的变种了。

我个人从前见过许多比赛资深岗位的提名人在具有彻底互联网拜访的情况下没能经过这一测验。所以假如你的简历上面列有VWIN首页言语的话,保证你知道怎样用它来编写完成 FizzBuzz 程序。不然的话,你只不过是在糟蹋全部人的时刻,包含你自己的。

当然,为了在面试往后生计,你需求知道的不仅仅只要 FizzBuzz。你还需求保证你知道:

  • 根底的数据结构和算法:比方链表、数组、树以及排序。
  • 要知道所挑选言语的常见处理办法,比方字符串是否稳定,内存是怎样办理的。
  • 相似类与方针,以及承继等面向方针VWIN首页的概念。

在作业生涯开端时,你需求就这些问题做好预备,由于你并没有阅历去证明自己能做好这份作业。在预备面试的时分有两个资源我会常常引荐:

  • Cracking the Coding Interview(破解面试代码)》,这是一本十分好的书,里边介绍了许多的编码问题和处理方案,一起还总结了处理这些问题需求了解的东西。
  • CodeWars ,这个网站收集了许多的VWIN首页问题,你能够运用各种言语在阅读器里边去处理这些问题。最有用的部分是看看其他用户是怎样处理相同问题的。这样你就能够看到处理相同问题的不同办法,而且学到你所选言语的新东西。

赋予本身额定优势

为了让自己获得那点额定优势,有几件作业你能够去做。

首要,学会怎样交流你的阅历。你应该进行一次电梯演讲来将你的简历总结成连接的、打动听的个人介绍。

此外,要了解自己的简历!听起来很蠢是吧,但我就见过许多面试者连解说清楚自己简历上的特定事项都很困难。你应该能够答复任何有关你列上简历的阅历方面的问题,而且解说清楚这一阅历怎样让你成为本作业更好的提名人。

接着,要在 GitHub(或许其他的公共代码库)上面有一些编码的比如。

眼见为实,面试官能够看到你的代码将创造奇观。此外,这还证明了你对版别操控体系有了解。

你的代码比如不需求太杂乱,可是一定要整齐,能够显现出好的编码实践。这是你展现自己在没有编码面试所带来的时刻压力情况下代码写得怎样的时机。

一旦你做完了上面的作业后,就得考虑参与一个开源项目了。参与开源项目能标明你能够在已有代码库根底上作业而且能够与其他程序员一些协作。

这是你在无需实践进入一个作业环境的情况下最接近在作业环境下VWIN首页的办法了。这也是目前为止最难最耗时的一项使命,所以比及你把前面我说到的比较简单获得的果实都摘完之后再干这件事。

面试你的面试官

在找作业的匆忙与压力之下,许多提名人都忘了面试是一个双向的进程。在公司尽力寻觅这份作业的适宜人选时,你也应该设法弄清楚这家公司适不适合你。

保证你也要提出以下一些问题,哪怕对方是以电子邮件的办法回复你。要意识到公司常常把不遵从最佳实践说成是一项技术,所以要领会其弦外之音。

以下是一些你能够去发问的比如:

“对我来说典型的作业日会是什么样的?”

知道特定岗位预期的姿态很重要,由于软件工程作业不同相当大。比方说你的作业既或许是保护服务器,也或许是直接跟客户交流。

风险信号:“我不大必定。” → 意味着面试你的那个人不在你的团队,或许他们对为什么要招你并没有明晰的主意。

“你们是怎样测验软件的?”

抱负情况下,验证代码质量应该是单元测验、人工测验以及自动化测验的结合。

风险信号:“咱们都写不出 bug,哈哈。” → 那些人正是会写出 bug 的人。

“你们运用什么样的版别操控体系?”

版别操控体系关于协作极端有用,在作业环境下没有理由不运用。

风险信号 #1:“额,版别操控体系?” → 快跑,跑得越远越好。

永久记住运用版别操控。

风险信号 #2:“<刺进不知名的或许定制的 VCS>” → 这标明他们很有或许没有跟上年代而且好久没有晋级自己的根底设施了。

“你们进行同行评定吗?”

同行评定,或许让他人看看你的代码再把它放进代码库,这是辨认愚笨过错的极好办法,一起也是开端你的作业生涯时一个要害的训练时机。

风险信号:“咱们相互信任!”→很有或许那些资深开发者对自己的代码十分警觉不想给人看也不拿手承受反应。

“你们的持续教育计划是什么样的?”

作为一名软件工程师意味着当新技术呈现、老练并以令人目不暇接的速度走向过期的时分要不断学习。因而,许多公司都有训练预算用来买大学和在线课程、会议或许内部交流。

风险信号:“你是说在空闲时刻读读网上的东西?” →这家公司要么资金严重,要么把开发者视为可代替的,而不是长时刻投资。

“你们选用的软件开发流程是什么?”

不管实践的细节是什么,流程关于软件工程都至关重要。至于哪些东西关于优化流程做出了奉献或许咱们会有不同的观点,但仅就项目的作业办法达到共同就能将紊乱最小化而且保证每个人都能达到一致。

风险信号:“咱们的流程受到了自在风格的爵士的影响。” → 很有或许整个部分都处在救火形式,总是不断地从紧迫跳到另一个紧迫状态而缺少任何明晰的方针。

“你们是怎样处理技术债款的?”

技术债款是过期技术以及代码库中暂时应急的处理方案的累积。处理好技术债款关于代码的长时刻健康很重要,这件作业应该持续地做。

风险信号:“咱们只重视新功用。” → 他们的代码库一团糟或许很快就会一团糟。

“你们的公司文明是什么样的?”

公司文明或许是个十分迷糊的概念,但即使像敞开办公室仍是小隔间这样的小作业都会明显改动你与搭档的日常互动。这方面没有普遍性的风险信号,可是要保证他们的答案是你能够依照每周 40+ 小时的节奏持续共处数年的东西。

以软件工程师的身份作业

在这个阶段,假如你面试进程中体现不错而且喜爱面试官答复你问题的办法,你被选用的或许性就很高了。

恭喜,你正式成为一名工程师了!

那现在又该怎样呢?好吧,现在是时分从头学习许多编码和作业方面的东西了。已然咱们是程序员,咱们就从谈论代码开端。

好的作业代码

好的作业代码有以下特点,依序是:

  1. 可读性,由于代码用来读和保护的频次要高于写。代码的目的有必要明晰,让其他开发者在多年后仍然了解。
  2. 防御性,便是要遵从防御性编码的最佳实践。防御性编码本身便是一个课题,不过其要义是:你有必要保证自己所写的类和办法的不恰当运用不会导致你的代码搞得软件都溃散。
  3. 优化,位列清单的最终不知道,由于大多数时分你并不需求真实去忧虑这个。这并不意味着你应该编写糟糕代码,在存在线性处理方案的情况下以O(n³)的功率去做某个东西。但开发者一般巴望测验而且会在不需求的情况下过度优化,却献身了代码的可读性和防御性。你永久都应该能够证明献身了这些特点的特定优化是值得的。

现在你了解了怎样去编写杰出的作业代码了。

编码的作业你不会干太多的

说出来或许有点令人吃惊,可是大多数时分你都不必写新代码,而是相反,要做:

  • 调试
  • 读已有代码
  • 开会或许写电子邮件
  • 研讨该怎样做以便不必写代码

因而编码以外的技术对你的作业相同要害。

调试和阅览代码

  • 调试远不仅仅是用打印句子。全部运用广泛的言语和技术栈都有各种强壮的东西。学会运用它们,由于这些会让调试垂手可得,节约你许多的时刻。
  • 了解代码库。大多数技术栈都有某种代码图谱生成东西来协助你了解代码库的结构。企业级的 IDE 一般都内置了那种功用。你还能够运用 ReSharper、grep 或许 Sourcegraph 之类的东西来探究代码。
  • 了解产品。你会对居然有这么多开发者在企图“修正”软件前不知道软件应该是怎样作业的感到惊奇。先看看文档再说吧。

安排你的思路

已然你的许多时刻都是用在交流、研讨和多使命上,你需求一些东西来协助全部有条有理。

  • TODO 清单/使命东西:你的公司应该已经有了某种使命办理软件了,但你自己也有相似的个人体系是有协助的。运用便当贴或许像 Trello 或许 Todoist 之类的软件。
  • 笔记:开会一定要记笔记,要致力于改善现有文档而且树立个人的常识库。运用 Evernote、OneNote 或许笔记本。运用这些东西好像有用力过度之嫌,但日后在回忆这一耗掉了你 3 天时刻才想清楚的不流畅的开发进程时你会感谢自己的。不做丰厚笔记的好的软件开发者我一个都没见过。
  • 图表/可视化:人是视觉动物,创立流程图和架构可协助你和其他人了解杂乱的论题。在跟非技术人员交流时图解特别有用。可运用 Lucidchart、 Visio 或许白板。

知道何时运用库

简略答复:随时都要。

具体答复:99% 的时刻内你都不应该从头创造轮子。在大多数的软件工程岗位,完成特定类型的东西都归于朴实糟蹋时刻。这并不意味着你不应该知道所运用的算法和数据结构是怎样作业的,由于这能够协助你决议用什么以及什么时分用。

为了成为一名高效的软件工程师,你需求了解自己能够恣意分配运用的那些库。大多数盛行言语的规范库都是极端有用的,其规划比你幻想的要大。此外,代码库或许也会运用了额定的特别库。阅览其文档,知道什么运用去运用它们。

你还应该不要惧怕去主张额定的库,假如它们将节约时刻的话。但是,你需求保证自己挑选了一个好的库供作业运用。好的库的规范是:

  • 开源,这样你就能够验证本身代码的质量,并有或许修补对运用十分要害的 bug。
  • 依照 MIT 和 BSD 等办法进行的授权,这样你的公司运用起来就不会遇到任何问题。要当心 GPL,由于它会让你不当心就将整个代码库都开源出去。
  • 老练,比方说出来已经有一段时刻了,而且功用集十分丰厚。
  • 保护性强,新版别推出很密布。
  • 其他公司或许项目也运用,这个能够充任质量认证保证有作业支撑,能持续保护下去。

持续改善

为了替自己创立新的作业时机,除了学习会让你更拿手日常作业的技术以外,你还需求持续改善本身技术而且学习新技术。

其实学习的时机有许多,而且其间许多都是你能够负担得起的:

  • 在线课程:向领域内最好的教授学习的时机,而且办法灵敏,不容错失。现有技术的弥补性教程能够去能够看看 Coursera、 Udacity 以及 edX 等。
  • 在线硕士学位:在线硕士学位是最近在尖端大学盛行起来的一个趋势,这种办法能够灵敏地持续你的正规教育。相比之下,这种持续教育办法费用没那么贵重,修完整个学位大多数在 1 万美元左右。乔治亚理工大学、UT 以及加州大学圣地亚哥分校等大学均供给此类学位。我个人引荐乔治亚理工大学的在线硕士虚伪,我上一年刚从这儿结业。
  • 博客:博客是开发者社区的重要组成部分。比如 Coding Horror、Joel on Software 等博客或许乃至愈加诙谐的网站如 The Daily WTF 等都能够为你供给信息,了解到作为软件工程师该干什么不应干什么。阅读 Medium、r/programming, HackerNews 等新闻流也能让你找到好博客和洽文章。
  • 会议:最终但并非最不重要的一个,会议时令人赞赏的学习时机,你肯定应该运用公司的训练预算去参与会议。以下是不彻底的好会议清单:GOTO(通用), Strange Loop(通用), PyCon (Pytho),CPPCon (C++),DEF CON (安全),Fluent (Web 开发)。上述全部的会议在 YouTube 上都有视频,所以你哪怕不到会也能学到东西!

期望这篇文章能够用相关常识把你装备起来,让你了解到作为软件工程师的作业生涯伊始应该等待什么,而且供给适宜的东西给你在敞开这段令人兴奋的旅程中助你一臂之力!

宣布我的谈论

撤销谈论
表情 插代码

Hi,您需求填写昵称和邮箱!

  • 必填项
  • 必填项
m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help