嵌入式转 web 后端,诚心求建议

2017-09-30 01:59:32 +08:00
 wxkvEX

个人背景

本人去年毕业,普通一本,电子类专业。在校期间发觉硬件路线的学习成本太高,而且内容枯燥,而软件则有趣的多,于是全力搞单片机,电路等科目学得一塌糊涂。毕业时也找到了对口的工作,在北京某通信设备制造商做软件研发,程序都是在 Linux 上运行的,从此也彻底和硬件无缘了。

改行不是心血来潮

入职之后,我发现公司的氛围比我想象中的要保守许多,大概是这个行业的一个特点吧。公司给大家配的台式机性能足够,但是还是有很多人选择虚拟机装 ubuntu 的方式,这样并无大碍,但是编译的效率比裸机装 ubuntu 要低,完整编译项目代码的时间差距在 15 分钟到半个小时左右,我不是非要拿这个说事,只是我的印象中,程序员追求高效,并且无所不能,但现实告诉我不是这样,而且老一点的程序员可能不擅长折腾系统,我猜可能是远古时代折腾系统远没有今天容易,大家都折腾累了。
一旦开始干活,很容易就打开一堆窗口,但是公司并没有给我们配双显示器,也没有人自己带,我只能说这样太不理想了,作为折衷我把自己的笔记本搬到工位,笔记本用 windows 接收邮件,用 qq 和测试交流,台式机则是 Linux 环境,主力开发。我默默许愿,等我能独当一面的时候,就自己给台式机组双显。
这些都是小的痛点,比较大的一个是通信公司流行的代码编辑器,Source Insight,这东西简直让我无力吐槽了,没有 Linux 版本(可以用 wine 但是容易出问题,陷入折腾的怪圈),不支持 UTF-8,而且还很丑。但是大家都用得很开心,在我入职培训的两个月里这个编辑器的使用甚至是一项重要的学习内容,当然我也认真学了,掌握了常用的快捷键和功能,但实在是无法忍受,估计我们老大也看出来了,他说你想用什么用什么,能写代码就行。我很高兴,但很快又发现挑选合适的开发工具并不容易,特别是我的方案要和 Source Insight 互有胜负,不然只是看着舒服,使用上被 SI 完爆,没有意义。我把能在 linux 上用的开发工具全试了一遍(不夸张),最终的方案是 VS code + Vim,用插件来实现代码跳转等功能,还能享受 Vim 的高效,算是和 SI55 开了吧。不过这也导致我遇到问题的时候,帮我解决的人用不惯我的电脑(但他们还是很热情,感激不尽),我有时候想自己是不是不应该这么特立独行,有时候又想,环境真是可怕,人在江湖身不由己。

变化来得太快

2016 年,我在公司的任务特别重,项目要赶进度,总要加班。过年后好了许多,我在想我估计快要清闲了,我想我应该去当教授(雾),把之前用的总结和学习一下,学习操作系统原理等高深内容。然而公司高层开会,市场部把我们怼了一番,产品市场反响不好,这个产品不做了,我们组整个解散。哇,我实在想不到居然这么快又要面临找工作的问题。而我觉得此前的工作内容带给我的成长有限,经我手的模块虽然多,但是都是水过地皮湿,没有细细研究过,说白了是干杂活。其他的新人都是专注某个功能模块,而我虽然名义上负责安全模块,实际上经常是周一分配任务的时候让我做一些没听说过的东西,周五就要弄出成果来。我个人虽然不喜欢干杂活,但是老大安排任务也是从团队角度来考量,无可厚非,谁知道会走到这一步呢。

略迷茫的学习

我面试了几家公司,发现他们都和我前东家一个类型,这让我认识到我的第一份工作其实带给了我很深远的影响,我的身上有了标签。要在这个行业一直做下去吗?此时转行固然艰难,过几年又能好到哪去呢?程序员说到底是解决问题的,解决网关的问题和解决服务器的问题又有什么本质的不同呢?而且我加班干活多,学东西少,沉没成本没有那么高。下定决心后我离开北京,回了家,帮家里做些事情,空闲时间学习 Java,5 月份我还在驾校报了名,趁脱产拿驾照,还不是美滋滋,“这波不亏”,我想。 事实证明我还是太 naive。我们这个三线城市,学驾照的人居然海了去了,报名到考科一等了 N 久,等科二分车又是 N 年,屁股还没坐热,暑假班来了……一个人的命运呐,唉。一个后端开发人员,需要掌握的内容很多。Java 可以算我的第二语言,我感觉学的过程中有类似知见障的东西,我若是个彻底的新手,什么不知,闷头学习就是,但是偏偏对各种东西都一知半解,想的太多,反而走了弯路。 同学给我建议是,就做最烂大街的那种 xx 系统,再往上加功能。从最简单的缓存开始,再做 Nginx 反向代理,负载均衡,然后是动静分离,服务拆分。这个路线应该没有问题,但实际操作起来,有很多细节摸不清楚。

  1. 做一个项目,会用到各种框架,数据库等。如果项目的业务写的简单,那么对框架和数据库的使用就是初级浅显的,如果业务写的复杂,则难免分心于业务,我从未有后端开发经验,写业务代码事倍功半。如果脱离写代码去学习理论,则又有点准备考试的味道了。我目前练习的项目是用户注册与登录系统,按照网上的教程,用户的密码在注册时加盐加密保存,使用安全的 HTTPS,服务器验证 Cookies 中的登录序列和 token,来实现防止 Cookies 盗用的功能。其实做到这我已经乱了,网上有用户帐户的安全设计,有使用 Redis 的 demo,这些都很容易看懂,但是把它们正确组合在自己的项目里却很难,太多细节和实现上的东西要考虑,状态好的时候我一遍遍地改写,这几天状态很差,只想看书,有空指点的大神可以帮我看看代码,提提意见,代码地址: https://github.com/wxkgh/SignOn

  2. 承接上个问题,我现在其实不是很清楚,各公司招聘说的熟悉 Spring 框架,熟悉 Mysql,熟悉 Mybaits,熟悉 Redis 是指什么程度,我做个用户的增删改查,能算熟悉 MySQL ?我觉得不行。

  3. 我现在学习偏重于应用,基础涉及的比较少,很多 Java 里的常识我都不知道(试图用 goto ……),我们这的科目三彻底乱了,排队考试遥遥无期,我在考虑找工作的事情了,时间有限,我这种学习应用等以后慢慢积累基础的路线是否可行呢?

唉,不知不觉说了一堆废话,恳请百忙之中抽出时间来看我应该是心路历程的人提出一些建议,如果我犯了一些错误,请轻喷。忘了说了,做 web 项目比嵌入式项目爽多了……

临表涕零,不知所言。

5771 次点击
所在节点    问与答
40 条回复
wxkvEX
2017-09-30 12:34:49 +08:00
@a87150 我们说的是学习时候的成本,学生时代几百块钱也是大的开销了。我在学校做比赛的时候是先自己垫钱最后学校报销的,每个人都垫了很多,真心不容易。
Osk
2017-09-30 12:36:58 +08:00
@a87150 专业点的开发板也有几千的。示波器、逻辑分析仪等等等等上万的可能都有人嫌弃。
kevinhwang
2017-09-30 12:47:25 +08:00
改行是你做的最正确选择,我是过来人。
有条件尽量拿到好朋友公司的代码,小模块也行,能快速进入公司开发状态。
其次找工作目标是什么,初级很饱和要跟培训机构竞争,尽量让朋友内推小公司,这样就很好上路了。
中级要了解很多东西,框架如 spring,很多实现细节并不是你写一写项目就可以知道的,要多看官方文档看源码等等。数据库如优化问题。虚拟机和分布式等知识。
熟悉 xxx,就是会用,遇到问题自行解决。
wekw
2017-09-30 12:55:36 +08:00
千万别学 Python,工作不存在的。
wxkvEX
2017-09-30 13:19:58 +08:00
@kevinhwang 多谢解答,观摩公司代码这个方法很好,是我考虑不周,没想到这一点。
iamzhuyi
2017-09-30 14:31:02 +08:00
用 Source Insight 的我瑟瑟发抖
TonyHoAspire
2017-09-30 14:31:17 +08:00
如果你真的使用过大部分的 code browser 软件的话,会知道 Source Insight 不错,但是绝不是没有对手的,例如 Scitools Understand,SlickEdit。这些软件,在很多方面甚至远比 Source Insight 要强。

如果是看内核和 U-Boot 的代码可以看看我为此写的脚本:
https://github.com/tonyho/Generate_Kernel_Uboot_Project_forIDE

当然从嵌入式脱坑是好的。个人也是嵌入式相关工作 5 年多。
wxkvEX
2017-09-30 15:25:33 +08:00
@iamzhuyi 呃,这个纯粹是个人喜好了
wxkvEX
2017-09-30 15:41:13 +08:00
@TonyHoAspire 很惭愧,你说的这些软件我当时没有用到。回想了一下,自己应该是从“ Linux 上可用的 C 开发工具”这个方向找的,陆陆续续用过 Clion,Eclipse,Sublime,Atom 等。
脚本已收藏,说不定将来还要看内核呢
smilekung
2017-09-30 15:51:24 +08:00
我本科也属于嵌入式相关吧 web 开发属于个人兴趣 毕业同时投了两边的简历 比较了待遇果断投入了 web 开发…
Damon4V
2017-09-30 16:02:44 +08:00
做服务器是最好的,永远都不会过时;
wxkvEX
2017-09-30 16:35:04 +08:00
@smilekung 吼啊,又满足个人兴趣,又有好的待遇。
Shazoo
2017-09-30 16:38:40 +08:00
工作没多久,换呗。

两者干活的方法论不同。
Morriaty
2017-09-30 17:13:06 +08:00
不太了解嵌入式,是不是 C、FPGA 这些?

如果是的话,建议主要目标还是往大数据这个方向,毕竟还算是蓝海。

可以以 web 做跳板,了解下软件开发的流程。又或者做些初级的 ETL。
wxkvEX
2017-09-30 22:38:56 +08:00
@Morriaty 是的。嵌入式公司卖设备的居多,市场部的话语权很大,研发算是三等公民了。就算智能硬件能火,我感觉这个蛋糕也不是现在普通的嵌入式公司能吃的了,风格太保守,反应太慢,与外界脱离的很厉害,到时候难免是给别人做嫁衣。
AltairT
2017-12-17 15:00:38 +08:00
@wxkvEX 挖个坟,LZ 你是如何找到后端工作的?我在南京这边,我简历是算着那点初级安卓写了一年经验,但是年底了面试都很少,面了几家也没后续.又不想像培训班出来的那样包装两年经验.难道你投的实习?
wxkvEX
2017-12-17 19:23:11 +08:00
@AltairT 不是实习,又不是学生了,老男人谁要啊。我找工作是在 10 月,现在 12 月了,每个时期不一样,明年三月又是人员流动的季节。我的情况就是技术 leader 看了我写的代码,认可我的自学能力和以后的发展。我觉得找工作这种事情,一是看平时的准备,二是看运气,上限和下限就是这么决定的。我没有写我求职的经历,何止是惨,简历都过不了几个,Java 岗位还会被培训公司以面试的名义骗去,投上 N 多次,才能提高找到合适的工作的概率啊。
AltairT
2017-12-17 20:30:24 +08:00
@wxkvEX 嗯,看来我还是需要多些耐心,一个人不上班还是很难受的.我已经打算放寒假,明年再找了(虽然明年初级也不好找).可以列一下书单和学习参考吗? 我的书单是核心技术卷一(除了多线程和图形界面几章都看完),大话设计模式(基本看完),实战 Java 高并发(看了三章),实战 Spring(说是实战,可以跑的代码少的可怜,只看了 7 章).还有就是照着黑马就业班学了一遍(不过弃掉了 ssh.第一个 ssh 项目我用 ssm 改写了)
wxkvEX
2017-12-18 12:53:12 +08:00
@AltairT 入职之前看过核心技术卷一卷二,spring 实战,springboot 实战,深入理解 Java 虚拟机,架构探险-从零开始写 Javaweb 框架(这本书很迷,我当时不看好它,甚至在自己的 GitHub 上强烈吐槽,然而工作之后发现里面的细节还是很实用的),大型网站系统与 Java 中间件实战,Maven 实战,工作之后看了 Java8 实战(极具实践性,看一天舒服一年,业务代码的救星),构建之法,人月神话,代码整洁之道-程序员的职业素养,重构。这些都是好好看了的,那些摸过一下参考过部分章节的就不罗列了。我不看视频,还是做项目吧,从需求出发,学以致用,感觉那样最快。
AltairT
2017-12-18 13:54:30 +08:00
@wxkvEX 谢谢回复!😂spring 实战我看不下去,前面配置都搞晕了,我还专门做了笔记还是很晕,所以才看的视频(主要是 XML 方式配置)。SpringBoot 面了几家感觉现在必须会了,所以这两天在看慕课网的入门视频,慕课那个微信点餐实战视频我也有。架构探险那本书应该类似源码解析那一类书,里面提到的动态代理和 ThreadLocal 在别的 Java 基础书和多线程书都有涉及,以后有时间买本翻翻吧。补 spring 系源码在计划中,不过优先 JDK 的部分源码吧。中间件那本书我看了下目录,不太适合初学者,初学者主要是会用 dubbo 或 spring clound 这些分布式框架。Maven 我看培训班视频已经会用了。Java8 那本我打算买来看看,毕竟核心技术里讲的不太全面。后面那几本都是提高代码质量的,作为找到工作后的书单吧。不过类似的代码大全我去年就看过了,还是要配合代码量提升才能有更大提升。最后就是,方便加个企鹅交流吗,我企鹅:1#030605#000

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/394743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX