当手头遇到一个问题想寻找方案借鉴时,更大的问题其实是 不知道这是个什么问题(单片机从业者,发这里纯属希望有更多软件视野回复)

辛昕 2014-10-11 09:44:48
我们很习惯在别人提问的时候,扔出一句,去百度。
百度确实很伟大,但前提是你知道输入什么关键词。有时候仅仅只是不了解或者不知道 专有名词 就找不到可能非常成熟,人尽皆知的答案。

举个很简单的例子。
两三年前,刚毕业,做的一个项目很多处理是并发的,是普通的单片机C程序,不存在什么线程不线程(裸机C程序要实现线程,实现本身的代价可能要比使用线程的回报高得多)。
那个时候我处理 并发的套路 其实基本上就是 状态机 的套路。

简单的说就是,把与过程有关的量,绝大多数是各类标志位,以及需要记忆的数值,
还有状态本身(那时候的东西实质上有两套状态。),把这些东西定义成 模块或者函数里的静态变量,从而达到 记忆功能;

那时候我虽然听说过 状态机 这个名词,但具体有什么应用我并没有去看。
更不会想到我在做的事情其实都属于 状态机 范畴。
只把自己做的事情看成是 并发的、异步的函数。

直到很久以后的不久前我无意想看看,这才发现我干的事全都是状态机能完美解决的。
包括非常有用的 序列检测器(用在通信字节流的接收和解析上极其管用),以及 状态转移表;
同时也让我明白了以前做的模式里,哪里是导致失败的原因(状态量外泄,具体来说,我那会两套状态,一套来自上位机通信CMD,一套属于自己的运行状态(RUN),我本该做成CMD作为输入,RUN作为状态,那就是一个 米利状态机。)
但我那会根本没这种概念,结果两套状态相互缠绕,最后变成了一个可怕的怪兽,就那样被纠缠了几个月。

如果我能早一两年知道去看状态机,或者说我知道状态机的设计方法可以用在这里,那我该会省事多少?!
但有时候,差的就是这一步——百度上能搜的东西太多了,讲软件的书也太多了,有思想,有语法,还有模式(设计模式,这也是我现在开始看的东西)......有时候我们根本不知道自己手头要做的事情其实从属于什么概念?
于是似乎只能靠一点点积累,对名词,对相应问题的抽象?加之我本身是机械专业,写程序纯属半路出家。

如果只是这样,那就没什么可问的了。而且也是完全没办法。
显然,浏览群书是最好的办法。而这方面,一直以来我都希望借鉴其他领域程序开发的成熟方法,思想,用在我的单片机上。所以也有去看一些自己了解到的,比较经典的书。
但我知道去找这本书来看必然意味着我大概了解它会讲什么,是什么主题的,假如是我不知道的,我很可能会错过——因为看书花的时间也不少,更严重的是,一知半解的情况下试图应用起来,经常会造成很多乱子。

也许多沟通是更加有效的方式。
只是我是做单片机的/嵌入式的,不是你们想象那种动不动vxworks,linux的,有很多时候甚至不用ucos等,或者说它对于我是不可见的。

我面对的更多的是裸机程序。我身处的行业是机电行业,大家的软件素养都有限。
从他们那里我能听到许多关于机械,电子的见闻,而软件方面,有时却是我才是信息源。

所以我想,还是回到软件圈里吧。

把自己遇到的问题 原原本本 讲述出来 或者 稍加抽象,看看能不能对应到一些早已成熟的理论或者方法,或者是一个模式。
...全文
158 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
辛昕 2014-10-11
  • 打赏
  • 举报
回复
引用 3 楼 ganjianh8 的回复:
但我发现程序员在做项目的时候,更需要的是分析能力和推理能力 语言、计算机基础这些经过几年的项目锤炼基本上都达标的 其中分析能力包括 获取相关信息的keyword能力; 分析问题流程,细化问题的根由等
同意,我大概在一年半以前,基本不关心什么语法了。忘了就忘了,百度一下就可以了。 只要知道有什么语法能用就行了。 此后的路子,基本上都是 看 代码大全 ,先从规范开始; 然后是 设计思想方面,但这个很杂,主要是看 编程匠艺 重构这一类的书。以及 软件测试 但是落实起来用很难,以至于基本用不上,反而几道真气乱窜,走火入魔,很多同行甚至说,做单片机(裸机程序)的,老是想这些不是什么好事。 再后来就是现在,开始琢磨 UML——也不指望学会多少,我喜欢martin follwer的观点,将其作为一种草图来启发和表达思维更好。 以及 设计模式,企图减少自己重复去纠结那些设计的方案和取舍。因为这种事我过去干得太多,冷暖自知。
ganjianh8 2014-10-11
  • 打赏
  • 举报
回复
现在很多公司招人,都先去做一份考语言基础的笔试题,然后面试的时候又去问你语言基础的问题结合你所做的项目 但我发现程序员在做项目的时候,更需要的是分析能力和推理能力 语言、计算机基础这些经过几年的项目锤炼基本上都达标的 其中分析能力包括 获取相关信息的keyword能力; 分析问题流程,细化问题的根由等
mujiok2003 2014-10-11
  • 打赏
  • 举报
回复
知之为知之,不知为不知, 是知也
辛昕 2014-10-11
  • 打赏
  • 举报
回复
先乖乖上班,这几天慢慢补充。
辛昕 2014-10-11
  • 打赏
  • 举报
回复
引用 6 楼 JamesChen1988 的回复:
不知所云。。。 ASP.NET C# linux/Windows C/C++ ARM9 STM32 做了一圈 没赶脚开发有那么大差异。。。
举个例子吧 因为大多数情况下,单片机用的是c,而非c++。 尽管我常用 结构体 来模拟部分 类的封装功能。 (结构体内用成员代替类的数据,属性,用函数指针代替类的方法),这个时候, 函数指针是没办法访问那些结构体的数据和属性的。 解决办法当然也有,就是 让函数指针带上个 this指针。 但这样,写起来还是挺别扭的。 (注:后来我在 C嵌入式编程设计模式 这本书里,看到类似的做法。) 这是第一种:受制于使用的语言。 类似的还有没有c++的 容器类使,很多方案就没法用。 当然这些不是什么要命的事情,但是,它们会是麻烦,特别是,但麻烦一个一个加起来的时候,就是头疼。 谢谢你推荐的书。 另外,希望继续保持交流
JamesChen 2014-10-11
  • 打赏
  • 举报
回复
楼主可以看看 《Code》 CSAPP 这类的书 也许能提供点思路?
JamesChen 2014-10-11
  • 打赏
  • 举报
回复
不知所云。。。 ASP.NET C# linux/Windows C/C++ ARM9 STM32 做了一圈 没赶脚开发有那么大差异。。。
赵4老师 2014-10-11
  • 打赏
  • 举报
回复
什么能力也不如实际编码和调试能力: 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行!

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧