刷题 or 不刷题,
是一个可以一直讨论下去的话题。
知乎上有一个超过200万浏览人次的帖子:
提问者是一个正在求职的毕业生,他对于为了面试而疯狂刷题的现象提出了疑问:
“是不是只要疯狂刷题,
就能够进入顶尖企业?”
知名作者、硅谷创业者Samer Buna曾写过一篇名为《Software Engineering is different from Programming》的文章讨论过这个问题。
让我们先来看看,
“过来人”是怎么看待这个这个话题。
本文主要解答了这三个问题:
1.只刷题是否等于会编程?
2.会编程是否等于能当软件工程师?
3.软件工程师到底是做什么的?
Part1
知道如何编程
并不意味着你是一个软件工程师。
什么是编程,在一台现成的机器上输入指令然后产生输出就叫编程。
所有人都可以学会写程序,它并没有想象中的那么难。
大部分会编程的人都可以写出简单的程序为自己解决问题,但不是所有人都能保证写出的代码对于解决其他人的类似问题同样奏效。
成为软件工程师需要会编程,但不仅仅是编程。
什么是软件工程师?
软件工程师,是一个需要设计、编写、测试、维护程序,为用户们解决实际问题的职业。这份工作需要创造强大安全、并且经得住时间考验的解决方案,甚至还需要去预防存在于原始问题中的一些未知问题。
我有一个很喜欢的推论来解释“为什么会编程不等于能成为软件工程师”:
“ 很多人都喜欢在洗澡的时候哼歌解闷,但遇到正式的表演场合的时候,你不能按照自己的调去随意演唱,必须和乐队伴奏完美融合,这才是专业的歌手的表演。”
类似的推论还有这些:
我们都在学校里学过算数和写字,但这并没有让我们成为数学家和作家。
我们都会煮东西填饱肚子,但当遇到要给成百上千的人做饭的时候,就需要找一个专业的主厨。
当我们想从0开始建一座房子的时候,并不会叫小区水管工来担此重任。
所以相较于“会编程”的人来说,软件工程师能够真正理解所要解决的问题,然后因此提供可行高效的解决方案。
换言之,如果一个编程者在工作中并不能理解所面临的问题究竟是什么,那他就不应该得到许可去以软件工程师的身份动手编程解决问题。
(这也是为什么,来Offer的老师们始终强调,在面试的时候,不要拿到题目就开始做题,要先和面试官确认自己要解决的究竟是什么问题,再动手写代码。)
Part2
会刷题不代表你会解决问题
前面提到,软件工程师所做的事情不能被简单描述为“编程”二字。
但他们的工作也没有那么复杂,其实无外乎两件事:满足需求和解决问题。
爱因斯坦说过:“聪明人解决问题,而天才预防问题”。这段话并不在要求你成为天才,但对于什么是解决问题,你需要有更深刻的理解。
比如,你是否认为,解决问题这件事是否就意味着写无数的程序?
作为过来人,我想告诉你一个道理:并不是所有在工作中遇到的问题都需要你用coding去解决。
在实际的工作中,一些case常常都可以被已存在的程序解决,或者只要将很多已有的程序放在一起去处理就能搞定。
当然,还有一些问题甚至在早期就可以被杜绝掉。
处理复杂的case的确需要编写很多程序,这当中可能需要并行运行程序,或者需要按顺序运行。但你有没有想过,还有一些方法也能奏效:比如通过教育用户,也能起到同样的作用?
这就是软件工程师的工作职责,为了解决问题,考虑到所有可能性。这也要求你在编程的时候,要做到未雨绸缪并且防患于未然。
因此,一个软件工程师在开始写程序的时候,应该先问问自己:
而一个仅仅会编程或者只刷题的人,对于问题的理解程度往往停留在写出一道题目的正确答案,这也是为什么一场面试或者一道面试题可以将很多候选者的差距大大拉开。
因为面试官想要招到的,是一个可以与其良好共事并共同发掘解决方案的人。
很多人会说,现在都有1000道题了,刷完也拿不到Offer。
科技公司并不想雇佣一个背诵默写答案,缺失工业界的思维的编程者。即使因为某种原因通过面试,在职业发展上也注定埋藏着局限性和短板。
凡是都需要用发展的眼光看待问题,在成为软件工程师这件事情上同样适用。
Part 3
代码质量
说完解决问题,我们再来说说代码质量。
会编程、会刷题并不意味着你有好的代码质量。
代码质量对于软件工程师来说至关重要。这是因为,在工业界的实际应用中,产品的更新迭代是一个不可逆的需求,用户们容易喜新厌旧,他们永远都需要更多功能和更方便的使用方法,这也是公司能够赚到钱的根本。
所以不要尝试去折中思考如何能够省力或者牺牲掉代码质量解决问题。在这个方面没有什么捷径,即使当你遇到迫在眉睫的Deadline,也应该保证自己尽可能地写出高质量的代码。
首先,你的代码要做到清晰且易读,其次要保证可以扩展,可以和其他程序兼容,最后要保证,当其他人去维护它的时候,不至于感觉到像是“遇到一场噩梦”。
每一个软件工程师都是种树的前人,保证你的树能成活,还要保证后人能够在你的树下乘凉。
Part 4
环境和测试
一名合格的软件工程师,要具备“化简为繁”的能力。
工程师们经常要穷尽每一种可能的情况,确保他们设计的软件能够适用于不同情景,并且完美应对各种突发情况。因此有时候,写代码可能是软件工程师繁杂工作中的最后一步。
例如,我们要为浏览器设计程序,你需要考虑适配所有主要浏览器;创建一款桌面应用,你需要确保软件能够同时适用于Mac和Windows,甚至Linux操作系统;开发一个基于数据的应用程序,那你就要事先想到当数据传输非常慢或者完全断线的时候,你的app是否能够维持运作?
很多时候,需求可能是一句话的事,有时候甚至是模糊或者不完善的,但软件工程师需要看到背后可能涉及的方方面面。
一名优秀的软件工程师不仅要知道如何解决问题、找到最终解,更重要的是,ta要清楚有哪些问题需要被解决。
Part 5
成本和效率
工程师们通常都能很快地解决一个问题。不过,如果你认为,雇佣experienced的工程师就仅仅意味着更高的花销,那你可能还看得不够远。
公司雇佣一个experienced的工程师无外乎是为了让一个问题能经历更少的试错从而被高效解决。要知道时间就是金钱,很多赚钱的机会就是在试错的时间中溜走的网上编题怎么赚钱,雇佣更贵的高级工程师们,目的就是为了省钱和赚钱。
同时你也要考虑到运行一个程序的耗费。每一个程序都需要使用电脑的资源。软件工程师要写出高效的程序并且避免无谓的损耗。例如,缓存常用数据是一种适用于此的策略,但它只是数千种工具和变体中的一种,可以使程序更快,更高效。
一个初出茅庐的程序员也许可以给到客户一个便宜且简单的解决方案。但从长远的角度出发,有经验的程序员会给出更加好维护且高效的方案。
Part 6
Usability
软件是为解决人的需求而设计出来的,因此“用户体验”是工程师脑海里时刻紧绷的一根弦。如何最大程度降低用户操作门槛、减少使用阻碍,是每一个软件工程师面临的重要课题。
下面,给大家举两个例子体会一下,设计软件该如何“以人为本”:
设计输入表单时,如果是让用户填写邮箱地址,那么就应该忽略邮箱地址中的大小写区别——千万别让用户因为一个大小写锁定键而崩溃。
使用重新定向时,一个使用感好的程序一定会保留用户重定向前的原始地址,这样当用户在新页面上完成操作后,可以重新回到初始页面,继续下一步。
比如说你打算在网上买机票,找到某一个合适的航班后正准备购买,结果却发现注册完账户需要重新进行搜索,这样的设计就很“赶客”了。
Part 7
Reliability,Security and Safety
软件工程师的职责是提供安全而可靠的解决方案。
我们肯定都曾经听说过关于软件或系统被恶意破坏或黑入的新闻。一个好的软件必须要能够有效应对恶意输入、错误状态和错误交互等多种情况。
但是,对于更为广大的普通用户来说,安全问题不只是关于恶意输入,一些正常输入同样需要注意。
如果用户忘记密码,你会允许他们尝试输入多少次?你会冻结他们的账号吗?如果是其他人通过输错密码故意让用户的账号冻结呢?你会不会让你的用户在非加密链接里输入密码?如果用户不在常用地点登录该怎么办呢?如果是自动登录,又该怎么办呢?
你如何保护用户,避免跨站点脚本、伪造请求、中间人攻击和社交网络钓鱼?如果你的服务器遭到DDoS攻击,你有对抗策略吗?
以上这些问题,都只是一名软件工程师日常“想秃脑袋”需要考虑的安全问题中的极小一部分。
软件会犯错,即使是最好的软件也会出问题。
而软件工程师需要担负起的责任,就是在没出现问题时未雨绸缪,在出现问题后能够及时止损。
如果你对于软件的安全性和可靠性完全没有概念,没有为此做出计划、设计对策网上编题怎么赚钱,那么你就称不上是一名软件工程师——你只是会编程甚至只是会刷题的人而已,而且你写的还是不安全的程序。
Ending
说了这么多,都是想说明一件事:成为软件工程师要付出的努力并不单纯等于刷题的多少。
在这篇文章里所列出的内容,基本覆盖到了科技公司在考察一个面试者时希望其所具备的视野和格局,所以不要将通过面试再简单地与只刷题划上等号了,这未尝不是对挑战的逃避。
要知道刷题是一种手段,它不应该成为你面试的目的,更不应该成为开启你软件工程师职业生涯大门的唯一钥匙。
本文参考了以下文章:
af26
想参加与工业界接轨的高端课程?
来Offer
【软件工程师旗舰核心课程】
已成功帮助3000+学员
斩获FLAG等公司offer
实现职业发展梦想
仅2019年第一季度!
来Offer的学员就斩获了300+offer:
向上滑动阅览
此为来Offer 2019 Q1 部分offer榜,
查看完整榜单,请登录
暑期班限时新增:
谷歌明星APP实战项目
来自谷歌Lookout团队的大神
将手把手带你开发一款
帮助残障人士的App!
简历上有这个项目,
助你提前锁定大公司秋招offer!
– 课程介绍 –
(点击下方图片查看)
– 课程咨询 –
求职,你只需要一门课程!
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,整站资源免费下载 点击查看详情
站 长 微 信: aj1658985874