一个初级程序猿的吐槽:蜻蜓点水全不精通(做过单片机软件、Linux驱动、Android App)

just2 发布于 2014/08/27 09:51
阅读 3K+
收藏 2


困惑,自身的情况:

------

做过2年单片机软件开发,是32位的arm cortex-m3芯片,写过2个成熟产品的软件,软件的基本模型是通过can或者485接口采集和发送数据;通过LCD显示数据,配上按键扫描和简单的菜单界面;以及GPIO控制的继电器。还搭载了ucos。

但我的局限是,仅停留在使用芯片厂商提供的库函数进行硬件配置。对芯片的内部工作机制不理解,所以遇到复杂的外设很难直接配置寄存器。

------

没有继续深入下去,然后跳槽做Linux驱动。工作内容是维护字符设备驱动。几乎没有写过全新的代码,只是在原有的代码基础上,做与硬件适配的配置。

即便如此简单的内容,也是在用了整整一年的时间,理解了字符设备驱动(包括char、tty、uart、i2c)的大体流程后,才知道应该修改什么地方。因为是成熟的驱动,几乎没有遇到任何有挑战的bug。
在这一年的时间里,还有必须要学习的ubuntu开发环境搭建、命令行、shell script、make、gdb、svn、git、emacs。

但我的局限是,对内核的互斥、同步、并发、阻塞、时间管理、内存分配等,只是知道有这样的概念,记得几个api。尝试过追踪内核代码,试图理解某项功能或者某个api的内核实现,但总会卡在某个内核的数据结构或者文件系统或者其它。好比进入一个庞大的迷宫。这还是单纯的字符设备,就没涉猎更复杂的块设备。

------

同样,没有继续深入研究学习linux驱动,因工作需要,几乎同时做android app开发。不会java、不懂android app,没用过eclipse/ADT,所有的问题全部靠搜索。好在网络上有几乎所有问题的解决方案和源码。就是这样,在半年的时间里,独立完成了2个用于驱动测试的app,参与另外一个app的开发。

但我的局限是,我不理解android,不理解java,不理解类,用c程序猿的思维,借着网络和eclipse的自动补全敲着代码。我想用整块的时间系统地学习,但发现时间总被用在解决新的问题,或者完成新的任务。

------

这是我四年的工作经历,我其实蛮喜欢这样宽范围的知识涉猎,这样可能不会局限于某一种选择。
但问题是,我花了太多时间,每一个新知识点的学习都很辛苦,但结果都是蜻蜓点水,没有任何一项精通,几乎没有独立完成一项工作的信心。

所以我还是一个初级程序猿,拿着微薄的薪水。然后一面告诫自己潜心学习。另一面又很急躁地望着其它专注于某一方面的开发者几倍于我的薪水,很不安。而我已经毕业四年了。

------

吐槽结束 2014-08-27 02:54:50 于上海闸北

加载中
0
-放弃OSC-
-放弃OSC-

在中小企业中很多人都会遇到,技术方向随着工作的改变而改变,而不是主动去选择技术方向。

技术涉猎范围广没什么问题,怕的是1)没有一个精通;2)各种技术之间的关联性不大。这样子你的上升空间不大,因为薪资和技术深度的相关性更大一些(当然还有年限、经验、社交等)。

所以,如果(斗胆)给个建议的话,真的还是选一个深入一点,不管是Linux上做驱动还是做APP,哪个学好了都很吃香。

just2
just2
你说的对。主动选择技术方向非常美好,不会被动。但这需要很强的能力和机遇啊。 我苦恼的是时间把控不好,四年了,总有那么一两天急躁。有时候还会因为较低的薪水而怀疑自己的能力。 你的建议就是我要做的 : )
0
长的不行
用于驱动测试的app大概是怎么实现的,能不能稍微讲讲,谢谢。
just2
just2
按照我的经验,驱动写好后,会写一个小的测试程序,make后,在命令行下执行,然后观察标准输出的打印。但这种方法不适合驱动工程师以外的人操作。而app的作用是,通过andoid的一些api(Runtime.exec之类的)调用linux层的命令,再通过一个子线程读取标准输出。或者是通过驱动程序创建的设备文件接口(类似于/dev/tty*),然后利用linux的标准文件操作函数来操作驱动。
0
神州浪子
神州浪子
楼主,有一个词叫  全栈工程师
尘极简凡
尘极简凡
回复 @just2 : 受益,感谢
just2
just2
回复 @coder_niu : 确实是一块一块的。很不成系统。不好破!!!
你才是程序员
你才是程序员
我觉得全栈工程师应该是对一整套流程比较熟悉,比如说楼主做安卓app客户端,同时也能应对服务器开发,这是一条线。 而楼主的技术好像不容易连起来。。。 而是一块一块的。。。
just2
just2
我根据这个词找到了一篇文章,读的心潮澎湃。谢谢你 : ) http://www.cnbeta.com/articles/268822.htm
0
OSC首席过客
OSC首席过客
单片机不了解,你咋写程序的?
0
wwwjjj
wwwjjj

按照你的描述,我觉得技术层面比你差但薪资比你高的人多了去了。

都是因为经验增长而涨工资,没听说谁因为学会了什么新技术而涨工资,因为你能学的别人也能学。

按照你的工作经验, 如果你觉得薪水低, 那么应该是跳槽的时候了。

just2
just2
回复 @wwwjjj : 其实底层转引用层也挺吃力的。至少从我目前接触的底层代码和应用层代码来看,应用层的要比底层代码量大、用到的技术也略复杂(也有可能是我刚接触的原因)
wwwjjj
wwwjjj
回复 @just2 : 那当然算了,而且来自实际工作的更是非常宝贵的经验。 底层开发和应用开发差别很大,应用的转底层吃力,底层转应用的话,纯粹是个习惯问题
just2
just2
但是,如果这些技术是工作时由项目推动学习获得的,这些技术是带着项目背景的,那么,应该可以算作经验吧?
0
wei2011
wei2011
楼主已经很厉害了.选择一个自己感兴趣的方向再深入点,必成大器
just2
just2
谬赞啦 : )
0
江上湖人
楼主可以考虑 IT猎头顾问
just2
just2
目前来说,猎头是不会猎到我哒。。。
0
MZHS
MZHS
能在老板能忍受的周期内解决自己陌生模块的技术问题,说明楼主解决问题和学习能力是有的,不过楼主始终只能处于‘工具’之流,要想和别人一样,那么你就必须有一个特长,就像楼主所说,楼主是样样会,样样不精,这种人在小公司老板喜欢,但是仅仅是喜欢,如果有一天楼主和老板闹翻,老板找一个楼主这样的很好找,但是楼主想找一份像样的工作就不见得好找了,甚至简历都不知道该怎么写,是硬件工程师?android工程师?IOS工程师?单片机工程师?前台?
另外,纯粹靠搜索出来的东西,很难有系统-体系的东西,就像楼主说的,用C的思维来解决现在android的问题,我估计你写的代码别人维护起来也是万分痛苦

我的建议是你可以找个特别喜欢的方向,找个培训机构或者买本书深入了解下
just2
just2
你说的对 : ) 确实不好写简历。确实很不系统。极度依赖google。必须要fighting
0
铂金小狗
铂金小狗

离开操作系统的日子!~

while (0 不等于 1)

{

    hello.world!

    p1 = 1;

    定时器延时

    P1 = 0;

    定时器延时

}

just2
just2
哈哈 可以 while(1) 一个跑马灯。。。
0
just2
just2

引用来自“命运的陶醉”的评论

单片机不了解,你咋写程序的?

单片机的裸机程序就是一个while(1).

首先给单片机时钟和电源,那么一个单片机就可以工作了。
然后呢,配置需要的硬件模块(基本上包括复用引脚的功能选择、中断配置、时钟配置)。
再然后根据业务逻辑编写各个功能模块,除了ISR之外,所有的模块都要放在while(1)内,需要各种标志位来控制代码的逻辑,或者通过状态机实现控制。。。

如果搭载了小型操作系统,比如ucos,那么就可以把模块划分成独立的任务,交由os管理,不需要标志位。代码逻辑会更简单。

返回顶部
顶部