本人去年毕业,普通一本,电子类专业。在校期间发觉硬件路线的学习成本太高,而且内容枯燥,而软件则有趣的多,于是全力搞单片机,电路等科目学得一塌糊涂。毕业时也找到了对口的工作,在北京某通信设备制造商做软件研发,程序都是在 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 反向代理,负载均衡,然后是动静分离,服务拆分。这个路线应该没有问题,但实际操作起来,有很多细节摸不清楚。
做一个项目,会用到各种框架,数据库等。如果项目的业务写的简单,那么对框架和数据库的使用就是初级浅显的,如果业务写的复杂,则难免分心于业务,我从未有后端开发经验,写业务代码事倍功半。如果脱离写代码去学习理论,则又有点准备考试的味道了。我目前练习的项目是用户注册与登录系统,按照网上的教程,用户的密码在注册时加盐加密保存,使用安全的 HTTPS,服务器验证 Cookies 中的登录序列和 token,来实现防止 Cookies 盗用的功能。其实做到这我已经乱了,网上有用户帐户的安全设计,有使用 Redis 的 demo,这些都很容易看懂,但是把它们正确组合在自己的项目里却很难,太多细节和实现上的东西要考虑,状态好的时候我一遍遍地改写,这几天状态很差,只想看书,有空指点的大神可以帮我看看代码,提提意见,代码地址: https://github.com/wxkgh/SignOn
承接上个问题,我现在其实不是很清楚,各公司招聘说的熟悉 Spring 框架,熟悉 Mysql,熟悉 Mybaits,熟悉 Redis 是指什么程度,我做个用户的增删改查,能算熟悉 MySQL ?我觉得不行。
我现在学习偏重于应用,基础涉及的比较少,很多 Java 里的常识我都不知道(试图用 goto ……),我们这的科目三彻底乱了,排队考试遥遥无期,我在考虑找工作的事情了,时间有限,我这种学习应用等以后慢慢积累基础的路线是否可行呢?
唉,不知不觉说了一堆废话,恳请百忙之中抽出时间来看我应该是心路历程的人提出一些建议,如果我犯了一些错误,请轻喷。忘了说了,做 web 项目比嵌入式项目爽多了……
临表涕零,不知所言。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.