本文选自《当我们说软件工程师的时候我们在说什么》
基于个人的经历和理解,下面内容列出了我认为对于一个软件工程师最重要的六个方面,然后对于每个方面我给出了解释和例子。如果你对这个话题有兴趣,请在评论写下你的观点和看法,谢谢!
计算机科学的基础
如果你在日常的工作中从来没有认识到一些基本的数据结构,算法知识,以及设计模式对一个软件工程师来讲是必不可少的,那么我就有理由对你是不是一个合格的软件工程师而产生怀疑。这里我说计算机科学的基础知识,是因为作为一个软件工程师而不是一个计算机科学家,我们完全没有必要去深入的研究探索某个概念或者更某个算法。我们仅仅只需要知道一些比较基础的原理,和用代码实现这些原理的方法。
例子1
现在你的任务是编写一个英语听力测验的软件,假设你有个英语句子和它们的录音,你将会让用户听这些录音并且写下来录音里的内容,然后去和原始的句子比对看看区别有多大,你应该怎么做来比对这两个句子?
好你瞬间就能意识到你应该用ditdistanc,然后你能在10分钟以内完成代码实现。
中你隐约记得有种方法是专门用来计算两个字符串的相似/相同,你花了15分钟在网上找到了这个东西叫ditdistanc,然后你又花了15分钟找到了实现方法然后贴在你的代码里。
差完全不知道怎么办
例子2
你现在要在一个软件的输入框里添加撤销/恢复的功能。
好两个栈(stack):undoStack[]和rdoStack[].
输入a,pusha到undoStack,undoStack=[a],rdoStack=[],input=a
输入b,pushb到undoStack,undoStack=[a,b],rdoStack=[],input=ab
输入c,pushc到undoStack,undoStack=[a,b,c],rdoStack=[],input=abc
撤销,undoStack出栈一个元素,push这个出栈的元素到rdoStack,undoStack=[a,b]andrdoStack=[c],input=ab
撤销,undoStack出栈一个元素,push这个出栈的元素到rdoStack,undoStack=[a]andrdoStack=[c,b],input=a
恢复,rdoStack出栈一个元素,push这个出栈的元素到undoStack,undoStack=[a,b]andrdoStack=[c],input=ab
差完全不知道怎么办
例子3
你听见有人在谈论斐波那契(Fibonacci)
好首先想到的是递归(rcursion).
中首先想到的是.
差什么都没想到
某种语言的代码能力和解决问题的能力大家都知道软件工程师写代码,所以不需要太多语言来解释为什么代码能力很重要。关于不同语言的选择问题,在某种方面看来,所以的语言都是一样的,它们都是一种工具来让计算机做我们想做的事情。每种语言都有它们各自的特点,优点以及缺点,作为一个软件工程师你必须要至少掌握其中一种语言。
对于一种语言语法以及内建库/函数的熟悉是代码能力中很重要的一个方面。但是在刚开始学习这门语言的时候,死记硬背这些东西貌似并不是一个明智的选择。经常查文档来获取这些还没有那么熟悉的东西的这种行为绝对不是代码能力不够的体现。
注:以下的例子都是Javascript
例子1
一个很常见的问题就是我们需要把URL里的参数提出来并且转化为一个Javascript的Objct。假设这个URL是:`专业治白癜风医院白癜风早期怎么治疗