×

c语言开发工程师 语言 程序

c语言开发工程师(现在各种开发工具很强大,传统的嵌入式C语言程序员会过时吗)

admin admin 发表于2023-05-07 03:32:39 浏览45 评论0

抢沙发发表评论

本文目录

现在各种开发工具很强大,传统的嵌入式C语言程序员会过时吗

谢邀。

在2000年前后,嵌入式软件工程师有着一套非常具体的技能,他们通常是电气工程师,不仅了解底层硬件的工作原理,还可以再底层编写汇编代码或者C语言代码,以使系统满足实时需求。

嵌入式软件工程师不仅要了解诸如C语言的软件开发,还要了解硬件。位、字节、寄存器的世界,正是嵌入式软件工程师的领域。

但是如今不再那么简单了

在早期,嵌入式开发人员通常使用 8 位或者16位的体系结构,这些结构比较简单,因此开发人员一般在几个月的开发周期内便能掌握这些结构。

但是近些年来,许多嵌入式开发团队已经转向更加复杂的 32 位体系结构,不仅包括一些用于数据采集的采样传感器,以及外围的通信设备,还包括日益繁多的各种协议,例如 USB、DMA、 TCP/IP、蓝牙等。这些复杂的体系架构,或者相关的通信协议,开发人员往往需要数年才能真正的完全掌握。

显然,嵌入式系统已经变得极其复杂。将硬件设备连接到互联网,以创建物联网的巨大需求,在以往传统的嵌入式C语言程序开发中是没有出现过的。所以,这一“巨大需求”导致了一个真空——相关公司找不到足够的嵌入式C语言软件开发工程师了。

为了应对“真空”,有些公司并未大力培养嵌入式C语言软件工程师,而是开始依赖具有Windows应用程序或者移动设备程序开发经验的人员来开发他们的实时嵌入式软件。这会导致另外一个较为致命的问题出现:这些开发人员大都只了解公司分配的任务所需的高层应用程序框架,对底层硬件却不够了解。

这样的公司并不在少数。因此微控制器制造商目前正在大力推动为开发人员提供高层的软件框架和工具,真正的硬件底层开发,则由制造商完成。这使得嵌入式软件开发人员,甚至应用程序开发人员更容易在更高层上编写软件,他们不必再担心底层的硬件了,因为相关的“轮子”已经“出厂自带”了。

显然,这样的嵌入式程序开发模式更加有利于一些嵌入式公司降低成本,加快产品上市时间。但是我们也可能发现,关心位、字节、寄存器的传统嵌入式C语言、汇编软件开发工程师显得没那么重要了,可能很快就会“灭绝”。

未来的嵌入式软件工程师将与传统的前辈们有着不一样的技能,他们也不再关心硬件底层,不再关心位、字节、寄存器,也不再关心任务的实时性,事实上,他们可能不再关心任何传统嵌入式程序员需要关心的东西。未来的嵌入式软件工程师可能只需要具备应用程序开发技能,知道如何调用一个 API 让硬件做事。

但是,他们不知道为什么要这么做,以及 API 到底是怎样命令硬件做事的,所以他们也不具备实时调试硬件的技能甚至概念,无法深入到寄存器中。这些工程师,更像是远离硬件的 Windows 程序员。

未来嵌入式软件开发人员不具备底层硬件开发能力不一定就是百分之百的坏事,至少这样的开发模式允许一些缺乏关键技能的开发团队或者公司继续发展下去,这一点可以从移动设备领域看出。

了解底层硬件的传统嵌入式程序开发人员永远都不会被“淘汰”,否则谁能提供 API,让上层应用程序开发人员调用,以控制硬件工作?

然而现实是,传统嵌入式程序开发人员被公司忽略了。很多高科技公司更加青睐机器视觉、机器学习和其他尖端研究领域的开发人员,值得说明的是,这些尖端人才往往不屑于驱动硬件这类“基础工作”。但是,如果没有程序员能够与硬件设备沟通,所谓的“机器”视觉和“机器”学习又怎样才能实现呢?

学了C语言,能做什么项目

谢邀,区块链底层技术研发工程师一枚,携满腔热情来怒答一发。

c语言是个好东西,编程语言中的战斗机,上至应用系统,下至操作系统,都可以来用c语言操作一发,可谓是用途之多,下面我就列举以下:

嵌入式软件项目

大名鼎鼎的linux就是c语言实现的,而且时至今日,linus也是到处反对c++,认为c是最好的语言。linux可能80%都是c语言实现的,剩下的20%可能是一些脚本和汇编语言实现的。c语言比较高效,也适合和设备打交道,所以要开发个什么驱动啊,写个什么底层网络库啊,c是比较适合的。

所以学了c语言,首先可以做做嵌入式相关的项目。

通讯及服务端项目

在要求安全性和性能的领域,c语言往往是第一的选择,而实时通信和服务端处理则是这样的领域。我们能在网络上看到很多招聘中后台选择一些跟高级语言的,但是也有后台选择c/c++的,尤其是一些性能要求高的场景的项目。

所以学了c,可以试着做做网络相关,后台相关的项目。

总结

c语言是最经典的语言,也是每个程序员必须掌握的语言,学好c语言,能对你的技术有更好的帮助,学好c语言,也是每个程序员要成为高手的必备条件。

关注令狐一冲,关注区块链技术和行业动态

我该如何成为一名合格的C\u002FC++软件开发工程师

现在正处于互联网公司的鼎盛期,而互联网公司主要使用Java、C#等语言,因为这些语言学习成本低、安全性高,且有很多已经写好的模块,可以直接调用,不需要造轮子。因此,如果你想进入互联网公司,那么并不建议花太大精力学习C/C++。至于C/C++的用途,C语言适合做嵌入式、操作系统,C++则更擅长做机器学习、计算机视觉、GUI编程等。

作为一个把C/C++当作毕业挚爱的童鞋,我说一下我的看法:

1. C++大致可以认为是在C语言这种结构化程序设计语言的基础上,增加了面向对象特性。因此,C语言的基础要掌握,包括输入输出、基本数据类型、指针、数组、字符串、函数、结构体等。有一些容易混淆的概念,比如数组名和指针、字符串和字符数组,一定要辨析。

2. 面向对象特性,C++如何实现封装、继承、多态。如果你熟悉Java语言,还可以比较C++和Java多态机制的区别。其他与类和对象相关的知识,还包括static关键字、const关键字、函数重载等。

3. 数据结构与算法、STL。数据结构、算法,与编程语言无关,是放之四海而皆准的。对常见的数据结构及其特点(时空复杂度、适用场景)应非常熟悉。经典的数据结构都被写进了STL容器,常用的有vector、string、stack、queue、set、map等,去看看它们底层是如何实现的。而算法,常用的就是查找和排序,像STL中也提供了优化的排序函数,直接调用std::sort()就可以。

4. 程序运行时的内存分配,尤其是栈和堆。理解栈和堆各自的特性,可以让你写出更安全、更快的代码。

5. C++11以后的新特性。时代在进步,C++也非复当年吴下阿蒙。这些新特性,很多是提供语法糖,例如auto关键字、lambda表达式、序列for循环、智能指针;但也有些要求使用者对C++机制具备深刻的理解,如右值引用、移动语义,这些可以算是进阶内容。

6. 图形界面编程。早期的MFC,现在的Qt,都是优秀的GUI库,可以做出漂亮的图形界面,非常有成就感!

7. 优化代码的意识。在保证代码可读性、可维护性的前提下,让代码更快、更省空间、更安全,是每个C++程序员追求的目标。引用传递、右值引用、STL......都是为此而生。有时我们还需要用到操作系统甚至硬件方面的知识。优化代码的过程,也能不断加深我们对于C++底层机制的理解。

以上其实也算是我在分享自己学习C++的过程吧😄我真的很喜欢C/C++,也希望能遇到更多志同道合的童鞋,互相探讨😆😆😆

编程到底难在哪里

谢谢邀请!

作为一名IT行业的从业者,同时也是一名教育工作者,我来回答一下这个问题。

首先,编程可以分为三个阶段,第一个阶段是对于编程语言自身语法的理解,这个部分虽然也具有一定的难度,但是大部分人,即使没有任何编程基础,经过一个系统的学习过程,都能够掌握。

第二个阶段是通过编程语言来完成各种逻辑操作,这个部分正是编程的难点所在,此时需要掌握各种算法和数据结构。实际上,编程问题说到底就是数学问题,但是并不是数学基础好的人,就一定能够顺利掌握编程,这中间还需要一个转换的过程,关键就在于算法设计能力的培养,这个过程比较考验程序员的逻辑思维能力和抽象能力。

第三个阶段是通过编程来完成各种资源的整合和操作,这个部分也是编程的一个难点,此时对于程序员的知识结构有较多的要求,涉及到操作系统、计算机网络、数据库等计算机基础知识。随着当前云计算和大数据的发展,目前云计算平台和大数据平台对于程序编写的影响越来越大,因为程序员需要借助于这些平台来完成资源整合。相对于算法设计来说,虽然这部分的难度也比较大,但是经过一个系统的学习过程,程序员的资源整合能力也会越来越强,这部分难点是完全可以通过努力来解决的。

对于很多初学编程的人来说,学习最大的难点在于如何建立自己的编程思想,而要想建立自己的编程思想,可以从编程过程和编程方法两个方面入手。虽然不同的编程语言有不同的编程过程,但是说到底就是一个抽象问题,而要想提高自身的抽象能力,多做实验是非常有效的方法。

我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!

大一非计算机专业学生,懂得一些C语言,只会敲代码,想要系统的学好嵌入式开发,该怎么做

从事嵌入式开发已经偶几年了,嵌入式主要分为两个领域硬件工程师另外一种是软件开发工程师,现在主要谈软件工程师,嵌入式软件工程师需要掌握基本编程语言C语言,这是编程语言,主要在嵌入式驱动开发以及应用级开发用的比较多,很多初学者都会问到C语言学到什么程度能够做开发,在问这个问题之前首先要明白自己掌握了多少基础知识,C语言从语法细节讲不是很多,但在实际操作过程中经验和套路非常多,组合方式灵活多变。

可能在梳理这门编程语言的时候没有觉得多么的语法,但在实际看代码的时候发现灵活性太强,很多代码如果之前没有接触过基本上抓瞎,特别是指针样式的转变,因为其灵活性和执行效率所以在嵌入式方面一直是首选的编程语言,linux操作系统以及底层驱动一直都是以这种编程语言为底子修改的,用C语言开发应用的嵌入式公司也是大有人在,说了半天C语言需要掌握多少知识,现在根据自己开发经验简单罗列下。

1.基础语法

数据类型,常量,变量,运算符,判断,循环等

2.函数

函数基本用法,函数指针,函数设计模式,递归函数

3.

数组和指针

数组和指针的基本语法,多级指针的使用,指针和数组以及函数组合使用方式

4.结构体

结构体字节对齐,以及数据结构的设计方式,结构体如何进行赋值

还有一些递归等方式应用,这些都是基本语法,关键还在于实际操作。说到最关键点还是指针,很多人觉得数据结构这门课程学起来非常费劲,如果在真正掌握了指针的这个概念学起来就非常省劲了,而数据结构也是嵌入式开发的必备基础之一,毕竟数据结构下一步的延伸就是算法逻辑了,所以讲C语言搞不定就不要考虑进一步嵌入式的学习了。

学习嵌入式需要掌握的基本功

1.

基本编程语言C/C++

嵌入式开发需要操作硬件,需要C/C++,这两种编程语言也是必备,如果觉得掌握起来有难度就可以先从C语言切入,在有了基本概念之后,再去学习C++,毕竟要在这个行业内有一个长足的发展需要必须要有一个长期的规划。先从第一种编程语言开始切入学习。

2.数据结构

单独把数据结构拿出来,因为在实际编程过程中免不了要设计基本模块或者框架,如果规划基本的数据结构是平常在编程中需要思考的问题,不仅仅是语法里面的结构体或者类的设计更有一些编程设计模式在里面。

3.linux

操作系统

在这单独列出linux操作系统,并不是嵌入式的操作系统都是使用这种,主要使用的概率太高了,操作系统就会涉及到进程和线程的基本概念,涉及到线程如何设置队列或者优先级等方面的问题,以及临界区等问题。特别是多线程一起操作的时候用的比较多。

C语言只是嵌入式编程一个小的方面,要想在这个行业内有所成就,先把自己的心态调整平稳稳扎稳打,一步一个脚印走下去,至于是不是计算机专业出身,这些都是客观因素,没有必要因为这些给自己戴上枷锁,限制自己的发展。

希望能帮到你。