嵌入式转 web 后端,诚心求建议 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wxkvEX
V2EX    问与答

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

  wxkvEX 2017-09-30 01:59:32 +08:00 6608 次点击
这是一个创建于 3000 天前的主题,其中的信息可能已经有所发展或是发生改变。

个人背景

本人去年毕业,普通一本,电子类专业。在校期间发觉硬件路线的学习成本太高,而且内容枯燥,而软件则有趣的多,于是全力搞单片机,电路等科目学得一塌糊涂。毕业时也找到了对口的工作,在北京某通信设备制造商做软件研发,程序都是在 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 项目比嵌入式项目爽多了……

临表涕零,不知所言。

第 1 条附言    2017-11-23 12:10:59 +08:00
不知不觉,工作一个多月了……再看看以前的疑惑,发现都是读书太少,想的太多。
以上。
40 条回复    2017-12-18 13:54:30 +08:00
a87150
    1
a87150  
   2017-09-30 02:06:08 +08:00 via Android
人生苦短,我用 python
cnnblike
    2
cnnblike  
   2017-09-30 02:10:05 +08:00
SI 没有那么差,尤其是你要注意到有些环境下的类库本身很不齐全的,接口也有不同,source insight 这种 battery included 的,还是有优势在的。
其次,虚拟机开 Ubuntu 优点很多,可以开快照之类的,出了问题直接回到上一个快照,简单,非常适合不想学 linux 运行和维护的选手。
KeepPro
    3
KeepPro  
   2017-09-30 02:14:41 +08:00 via Android
应该算是在围城里的人吧。我一直觉得嵌入式有意思的.
moonweilan
    4
moonweilan  
   2017-09-30 02:31:14 +08:00 via iPhone   2
做 web 的多数都是在折腾业务,而且往往 web 时间紧任务多,IT 业里加班多的属 web 领域的了吧,别问我怎么知道的
bazingaterry
    5
bazingaterry  
   2017-09-30 02:58:53 +08:00 via iPhone
楼主文笔流畅,思绪清晰,实属不易。不过作为学生,没能力给建议,而且和楼主有同样的困惑,关注 ing。
byebyejude
    6
byebyejude  
   2017-09-30 03:12:58 +08:00 via Android
同潜入
byebyejude
    7
byebyejude  
   2017-09-30 03:14:01 +08:00 via Android
。。。不好意思哈 大半夜梦回 还没写完 同嵌入式同想法 有机会聊聊啊 楼主加油
jingniao
    8
jingniao  
   2017-09-30 06:41:38 +08:00 via Android
因为受上学时某些老师影响,一直觉得嵌入式很高大上,也就最近想明白了点。
虽然我就是你说的 web 后端,但同样是后端,不同岗位,不同公司的要求也是千差万别的,有一些共性,但想突破你之前做的东西,也是很难被接受的
onlyhot
    9
onlyhot  
   2017-09-30 08:01:15 +08:00 via iPhone
接触过两个嵌入式的开发,都是十年左右的经验,从深圳和上海回到武汉,工资降到一万多点…
Osk
    10
Osk  
   2017-09-30 09:00:35 +08:00 via Android
学习硬件成本太高+1,说多都是泪
NSAtools
    11
NSAtools  
   2017-09-30 09:09:32 +08:00
嵌入式就是一个大坑
GeruzniAnsasu
    12
GeruzoniAnsasu  
   2017-09-30 11:27:32 +08:00
同嵌入式
我是没得选
但见过互联网盛况的搞嵌入式都呆不住的
确实太保守
wxkvEX
    13
wxkvEX  
OP
   2017-09-30 11:34:55 +08:00
@a87150 嘿,当初我写了一些 shell 脚本帮忙调程序,都遭到了老员工的反对……
AltairT
    14
AltairT  
   2017-09-30 11:45:00 +08:00 via iPhone
嵌入式主流不是单片机就是 Linux,相对薪资待遇技术成长都不如软件,不过嵌入式机会少竞争也少。我也是电子专业,在单片机上打了两年杂开始折腾后端。
wxkvEX
    15
wxkvEX  
OP
   2017-09-30 11:53:08 +08:00
@cnnblike 有道理,我曾尝试过 ubuntu 的备份,妥妥的失败了,虚拟机的话容易操作的多。
类库问题我没有遇到过,我们是用 C 的……我对 SI 的看法完全是个人喜好
wxkvEX
    16
wxkvEX  
OP
   2017-09-30 11:59:06 +08:00
@Osk 芯片,洞洞板,导线,哪个不要钱啊,稍不注意就要烧几个,惹不起惹不起。
wxkvEX
    17
wxkvEX  
OP
   2017-09-30 12:01:34 +08:00
@AltairT 你的意思是开始业余学习后端了还是已经转行做后端了?我打杂的时候项目也有 web 页面和 cgi,学习后端的时候感觉似曾相识,怕不是冥冥中自有天意 @_@
a87150
    18
a87150  
   2017-09-30 12:06:21 +08:00
@wxkvEX 后端才花钱好吗,稍微好点的服务器就要几千了,你讲的这些东西几百块钱买一大堆。
AltairT
    19
AltairT  
   2017-09-30 12:18:17 +08:00 via iPhone
@wxkvEX 小公司自学转岗安卓做了一年,感觉安卓水平太菜市场不好又去折腾后端,目前还在脱产学 java 后端
wxkvEX
    20
wxkvEX  
OP
   2017-09-30 12:30:46 +08:00
@AltairT 可以可以,加油。
wxkvEX
    21
wxkvEX  
OP
   2017-09-30 12:34:49 +08:00
@a87150 我们说的是学习时候的成本,学生时代几百块钱也是大的开销了。我在学校做比赛的时候是先自己垫钱最后学校报销的,每个人都垫了很多,真心不容易。
Osk
    22
Osk  
   2017-09-30 12:36:58 +08:00 via Android
@a87150 专业点的开发板也有几千的。示波器、逻辑分析仪等等等等上万的可能都有人嫌弃。
kevinhwang
    23
kevinhwang  
   2017-09-30 12:47:25 +08:00 via Android
改行是你做的最正确选择,我是过来人。
有条件尽量拿到好朋友公司的代码,小模块也行,能快速进入公司开发状态。
其次找工作目标是什么,初级很饱和要跟培训机构竞争,尽量让朋友内推小公司,这样就很好上路了。
中级要了解很多东西,框架如 spring,很多实现细节并不是你写一写项目就可以知道的,要多看官方文档看源码等等。数据库如优化问题。虚拟机和分布式等知识。
熟悉 xxx,就是会用,遇到问题自行解决。
wekw
    24
wekw  
   2017-09-30 12:55:36 +08:00   1
千万别学 Python,工作不存在的。
wxkvEX
    25
wxkvEX  
OP
   2017-09-30 13:19:58 +08:00
@kevinhwang 多谢解答,观摩公司代码这个方法很好,是我考虑不周,没想到这一点。
iamzhuyi
    26
iamzhuyi  
   2017-09-30 14:31:02 +08:00
用 Source Insight 的我瑟瑟发抖
TonyHoAspire
    27
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
    28
wxkvEX  
OP
   2017-09-30 15:25:33 +08:00
@iamzhuyi 呃,这个纯粹是个人喜好了
wxkvEX
    29
wxkvEX  
OP
   2017-09-30 15:41:13 +08:00
@TonyHoAspire 很惭愧,你说的这些软件我当时没有用到。回想了一下,自己应该是从“ Linux 上可用的 C 开发工具”这个方向找的,陆陆续续用过 Clion,Eclipse,Sublime,Atom 等。
脚本已收藏,说不定将来还要看内核呢
smilekung
    30
smilekung  
   2017-09-30 15:51:24 +08:00 via Android
我本科也属于嵌入式相关吧 web 开发属于个人兴趣 毕业同时投了两边的简历 比较了待遇果断投入了 web 开发…
Damon4V
    31
Damon4V  
   2017-09-30 16:02:44 +08:00
做服务器是最好的,永远都不会过时;
wxkvEX
    32
wxkvEX  
OP
   2017-09-30 16:35:04 +08:00
@smilekung 吼啊,又满足个人兴趣,又有好的待遇。
Shazoo
    33
Shazoo  
   2017-09-30 16:38:40 +08:00
工作没多久,换呗。

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

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

可以以 web 做跳板,了解下软件开发的流程。又或者做些初级的 ETL。
wxkvEX
    35
wxkvEX  
OP
   2017-09-30 22:38:56 +08:00
@Morriaty 是的。嵌入式公司卖设备的居多,市场部的话语权很大,研发算是三等公民了。就算智能硬件能火,我感觉这个蛋糕也不是现在普通的嵌入式公司能吃的了,风格太保守,反应太慢,与外界脱离的很厉害,到时候难免是给别人做嫁衣。
AltairT
    36
AltairT  
   2017-12-17 15:00:38 +08:00
@wxkvEX 挖个坟,LZ 你是如何找到后端工作的?我在南京这边,我简历是算着那点初级安卓写了一年经验,但是年底了面试都很少,面了几家也没后续.又不想像培训班出来的那样包装两年经验.难道你投的实习?
wxkvEX
    37
wxkvEX  
OP
   2017-12-17 19:23:11 +08:00
@AltairT 不是实习,又不是学生了,老男人谁要啊。我找工作是在 10 月,现在 12 月了,每个时期不一样,明年三月又是人员流动的季节。我的情况就是技术 leader 看了我写的代码,认可我的自学能力和以后的发展。我觉得找工作这种事情,一是看平时的准备,二是看运气,上限和下限就是这么决定的。我没有写我求职的经历,何止是惨,简历都过不了几个,Java 岗位还会被培训公司以面试的名义骗去,投上 N 多次,才能提高找到合适的工作的概率啊。
AltairT
    38
AltairT  
   2017-12-17 20:30:24 +08:00
@wxkvEX 嗯,看来我还是需要多些耐心,一个人不上班还是很难受的.我已经打算放寒假,明年再找了(虽然明年初级也不好找).可以列一下书单和学习参考吗? 我的书单是核心技术卷一(除了多线程和图形界面几章都看完),大话设计模式(基本看完),实战 Java 高并发(看了三章),实战 Spring(说是实战,可以跑的代码少的可怜,只看了 7 章).还有就是照着黑马就业班学了一遍(不过弃掉了 ssh.第一个 ssh 项目我用 ssm 改写了)
wxkvEX
    39
wxkvEX  
OP
   2017-12-18 12:53:12 +08:00
@AltairT 入职之前看过核心技术卷一卷二,spring 实战,springboot 实战,深入理解 Java 虚拟机,架构探险-从零开始写 Javaweb 框架(这本书很迷,我当时不看好它,甚至在自己的 GitHub 上强烈吐槽,然而工作之后发现里面的细节还是很实用的),大型网站系统与 Java 中间件实战,Maven 实战,工作之后看了 Java8 实战(极具实践性,看一天舒服一年,业务代码的救星),构建之法,人月神话,代码整洁之道-程序员的职业素养,重构。这些都是好好看了的,那些摸过一下参考过部分章节的就不罗列了。我不看视频,还是做项目吧,从需求出发,学以致用,感觉那样最快。
AltairT
    40
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
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     879 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 35ms UTC 21:18 PVG 05:18 LAX 13:18 JFK 16:18
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86