在过去的5年里,人们一直在努力学习编写代码并将软件工程作为一种职业。看看Google趋势,你可以看到年左右的增长。
过去7年在Coderbyte工作,以及在各个公司担任软件工程师,我有机会帮助人们完成学习编码的过程,然后看着他们成为专业的软件开发人员。以下是我学到的三件对于进入该领域的人来说很重要的事情。
1、你学习的初始编程语言应与你的目标保持一致
你有时会看到高级工程师鼓励其他人尝试并首先学习像C这样的语言,因为他们将更好地理解重要的计算机科学概念。这样做的问题在于,你实际上可以学习如何编写代码并获得软件工程工作,而无需了解C.
如果有人学习编码以便他们可以设计网站并获得更好的工作,那么就不应该通过lambda演算或Lisp来介绍它们-它们应该从HTML,CSS和JavaScript开始。如果有人想成为Android开发人员,他们应该尝试学习Java。
JaneStreet的YaronMinsky撰写了一篇文章,对于他将在入门编程课程中教授的语言提供了非常丰富的信息。他发表以下评论:
在许多方面,Python是理想的访谈语言......但我所看到的是,学习Python的学生经常会使用相当粗略的语言语义模型。你可能会惊讶于在Python中进行了大量编程的学生中,有多少人无法猜测Python列表的实现方式,更不用说他们解释语言特征(如生成器或装饰器)语义的能力了。
根据这一段,对于编程人员来说似乎是一个新人,他们要成为一名优秀的程序员并找到一份他们需要学习C语言的工作,然后如果他们决定选择Python他们就需要了解生成器是如何实现的,或者面试官会认为他们不是优秀的程序员。但事实并非如此。
如果你的目标是转移你的职业生涯并获得你的第一个软件开发人员的工作,那么你很可能不需要理解前一段中的那些东西(如果你这样做,那就没有用了)。另一方面,如果你已经有一个编程工作,你的目标是更好地了解计算机的工作原理,那么肯定,也许学习C或汇编是一个好主意,但这一切都取决于你的目标。
这是freeCodeCamp上关于要学习哪些编程语言以及你可以用它们做的事情的好文章,这里是StackOverflow开发者调查,它有最流行的语言排名。彼得·诺维格(PeterNorvig)也有一个很好的(但更倾向于CS学生)关于学习编码的文章,最后他写道:
我对第一种编程语言的建议是Python或Scheme。另一个选择是Javascript,不是因为它非常适合初学者,而是因为它有很多在线教程。
摘要:确保将你正在学习的内容与目标保持一致。不要只选择C或Lisp,因为这是他们在计算机科学课程中教授的内容。
2、计算机科学≠软件工程
有人可能会说,一个优秀的软件工程师会理解一些基本的计算机科学主题,例如数据结构,内存分配,解析器的工作方式,缓存,数据库索引等等。虽然这些都是计算机科学领域非常重要的概念,但当它在构建软件时,其中一些概念的重要性低于你的预期。ChuckConnell在他的论文“软件工程≠计算机科学”中写道:
软件工程具有必不可少的人力成分。例如,软件可维护性是指人们理解,查找和修复软件系统中的缺陷的能力。软件的可维护性可能会受到计算机科学的一些正式概念的影响......但可维护性至关重要地涉及人类,以及他们掌握源代码的含义和意图的能力。
这就是为什么有很多工程师和软件开发人员专注于使用一套工具解决问题,即使他们没有正式的教育背景,现在在知名公司工作。例如,塞巴斯蒂安·麦肯齐(SebastianMcKenzie)创建了Babel,没有接受过语言语法,解析器或编程语言设计等主题的正规教育。
计算机科学和软件工程齐头并进,但你无需了解数百个高级计算机科学主题即可获得软件开发工作(无论如何,你将在工作中学到最多)。我和很多来自经济学,艺术和写作背景的工程师一起工作过,他们不仅仅是一个工程师,而是一个能够在睡眠中解决二元树挑战的CS学位的工程师。我认为你应该对以下主题有一个很好的理解:
基本数据结构/算法Git/版本控制终端/UNIX命令数据库和索引如何工作MVC概念(后端与前端)摘要:不要被先进的计算机科学概念所淹没。构建软件并不断学习和挑战自己更重要。不要认为你需要阅读高级计算机体系结构书籍或TAOCP来称自己为“真正的”软件工程师。
3、技术面试并不完美
互联网上有无数关于如何讨厌,糟糕和有缺陷的技术面试的文章(甚至还在年)。以下只是几个:
开发人员面试被破坏,你无法解决它技术面试是衡量软件工程能力的一个很好的指标吗?网上还有大量资源可以帮助你准备编码面试,例如:Coderbyte,LeetCode,InterviewCake,InterviewBit等。
但重要的是,因为技术面试只是社区中的一个热门话题,而且由于公司采用不同的方式,因此你需要了解这一点,因为有些公司拒绝你并不意味着你不会被视为软件工程师。有无数的工程师被一些顶级公司拒绝,然后他们在别的地方找工作,或者甚至创办自己的公司。
有些像Stripe这样的公司已经改变了他们进行访谈的方式,以便更加贴近工程师的实际工作方式:
“我们让候选人在他们自己的笔记本电脑上进行面试,”Stripe产品负责人RayleneYung说。这是一种低压格式,如果候选人早早失误,他们可以迅速和私下重组。一旦候选人完成,他们就会展示他们的工作。
摘要:技术面试充满了精英主义(特别是大学)和信号问题,但被拒绝并不一定意味着你不是一个优秀的软件工程师。继续练习和学习,最终你会到达你想去的地方。