WEB领域是不是黄了还是没黄

news2024/11/15 17:47:27

进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。

中国程序员在应用层的集中

  1. 市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是在电子商务、社交网络、移动支付等领域。这些领域的快速发展催生了大量对应用层开发的需求,因此许多中国程序员专注于使用现成的框架和技术来快速构建应用程序。

  2. 企业需求:许多中国企业更注重短期收益和市场占有率,因此更加倾向于快速迭代产品和服务,而不是投入大量资源进行底层技术的研发。这导致了很多程序员的工作集中在业务逻辑实现上,即CRUD操作。

  3. 教育和培训:中国的高等教育和职业培训机构往往更侧重于教授实用技能,以便学生能够迅速就业。这种倾向可能导致更多人学习如何使用现有工具和框架,而不是深入研究底层原理。

国外程序员的优势

  1. 历史积累:许多基础技术和框架起源于国外,特别是美国和欧洲。这些国家和地区在计算机科学和软件工程领域有着悠久的历史,积累了大量的经验和知识。

  2. 开源文化:西方国家拥有浓厚的开源文化,许多优秀的开源项目都是由国外开发者发起并维护的。这种文化鼓励技术创新和共享,使得国外程序员更容易参与到核心技术的开发中。

  3. 国际化视野:英语作为国际通用语言,为国外程序员提供了更多的交流机会和获取最新信息的途径。他们可以更方便地参与国际会议、阅读英文文档和教程,从而保持在技术前沿。

  4. 资金支持:一些大型科技公司如Google、Microsoft、Oracle等,在技术研发上有巨大的投入。这些公司在推动技术进步的同时,也为程序员提供了良好的工作环境和发展平台。

    英语的优势

  5. 国际交流:英语是国际科技会议、论坛和开源社区的主要交流语言。掌握英语可以帮助程序员更好地参与这些活动,从而获取最新的技术和行业动态。

  6. 文档与资源:很多高质量的技术文档、教程和在线课程都是英文的。能够无障碍阅读这些资料有助于程序员更快地学习新技术。

  7. 全球就业机会:对于那些希望在全球范围内寻找工作机会的程序员来说,良好的英语能力可以打开更多大门。

国内程序员和国外程序员面对的环境问题

  1. 劳动力市场结构:在一些发达国家,如美国,IT行业的发展更为成熟,企业对于技术人才的需求稳定且持续增长。同时,这些国家的教育体系和职业培训机制往往能够较好地与市场需求对接,培养出符合行业需求的人才。

  2. 法律法规保护:西方国家通常有更完善的劳动法律体系来保护员工权益,比如解雇程序较为复杂,需要给出正当理由,并提供相应的补偿。这使得企业在裁员时会更加谨慎。

  3. 社会保障体系:很多西方国家拥有完善的社会保障网络,包括失业保险、再就业培训等服务,为失业人员提供了更多的缓冲和支持,帮助他们更快地重返工作岗位。

  4. 工会力量:在某些国家,工会的力量较强,可以代表员工与雇主谈判,确保员工获得更好的工作条件和待遇,同时也减少了无故解雇的情况。

  5. 企业文化差异:西方国家的企业文化可能更注重员工的工作生活平衡,较少出现长时间加班的现象,这样的环境有助于保持员工的工作热情和创造力,从而减少因过度劳累导致的职业倦怠或离职。

  6. 技能更新和终身学习:在一些发达国家,企业和政府都鼓励并支持员工进行持续的学习和个人发展,以便适应不断变化的技术环境。这种对个人成长的投资可以帮助程序员保持竞争力,降低失业风险。

  7. 国际化视野:由于英语作为国际通用语言的优势,西方国家的程序员更容易参与全球项目,接触到国际市场的机会也更多,这增加了他们的就业机会。

  8. 创新和技术领先地位:一些发达国家在技术创新方面处于领先地位,这意味着它们有更多的高薪岗位和高级职位,这些职位往往更能抵御经济波动的影响。

  9. 经济稳定性:虽然全球经济都有周期性的波动,但是一些发达国家的经济相对稳定,即使在经济不景气的时候,也能通过各种政策措施来缓解失业问题。

图片

图片

国内大批程序员高度集中在应用层居多,在应用层框架和语法使用者居多,加上环境的影响往往比较重视快,加班,而专研做底层的往往很少,比如一个JAVA开发,springboot ,idea intellij ,open jdk,oracle jdk都是老外在占据并且主导整个全球市场,面对全球用户,而国内的java表们往往是应用层多,还受环境污染,觉得JAVA牛逼=我牛逼的思想腐蚀,PHP垃圾=他也垃圾的影响,相反参与研发open jdk,idea,spring全家桶的JAVA程序员很少,在这种环境下经济波动一影响,往往饿饭,跟我一样捡垃圾过日子。

而国外程序员往往深耕某领域比较深入,也都是几十年的经验,就算只玩应用层框架,也都无的风声水起,比如php。

图片

图片

还获得了几千万支持。

图片

他们的土壤和环境要比国内好很多,在国内PHP早就啥也不是了,但国外人家就玩的一套一套的。

同时国外的商业软件环境也非常好,这些商业软件都需要数学,物理,化学,电力,通信,机械,电子,化工等等专业知识来实现的商业软件,下面看看吧,下以商业软件大部分都是来源于加拿大公司的商业软件,其中国内不少大型单位还是他们公司的客户购买他们的商业软件和服务。

电力实时仿真系统

图片

https://www.opal-rt.com/zh-hans/software-rt-lab/

数字仿真器

图片

图片

https://www.opal-rt.com/zh-hans/systems-hypersim/

图片

图片

这家公司的客户

图片

这家公司的产品

图片

领先的电力系统分析工具

图片

https://www.dsatools.com/

这家公司的客户:浙江大学,太原理工大学,中国易核电力工程有限公司

https://www.dsatools.com/news/

图片

图片

https://www.dsatools.com/partners/

电磁设备提供设计和建模软件

https://www.infologicdesign.co.uk/

图片

图片

Maple数学软件

图片

图片

图片

https://cn.maplesoft.com/products/Maple/features/

图片

图片

图片

图片

图片

图片

图片

图片

全球强大的电影特效软件产品

https://www.sidefx.com/tutorials/

图片

https://www.meetup.com/pro/houdini/

他们公司的招聘

图片

https://www.sidefx.com/careers/

土木、采矿和岩土工程2D 3D 软件

https://www.rocscience.com/software

图片

图片

图片

图片

防真软件

图片

图片

图片

https://www.simscale.com/

世界领先的接地,雷击和电磁干扰分析技术

https://www.sestech.com/zh/Home/About

图片

他们公司的客户

图片

图片

图片

图片

图片

图片

https://www.sestech.com/zh/Training/CertifiedUsersList

图片

QNX系统

https://blackberry.qnx.com/en/industries/industrial-control

图片

QNX的应用范围极广,包含了:控制保时捷跑车的音乐和媒体功能、福特汽车的SYNC 3车载系统、核电站和美国陆军无人驾驶Crusher坦克的控制系统,还有BlackBerry PlayBook和操作系统。[2]

图片

此系统的应用领域

图片

BlackBerry QNX® 是值得信赖的商用操作系统、虚拟机管理程序、开发工具、支持和服务供应商,所有产品均专为全球最关键的嵌入式系统而构建。®BlackBerry QNX 可帮助客户简化开发工作,更高效地推出安全可靠的系统。我们的技术受到超过 2.35 亿辆汽车的信赖,并部署在全球各行各业的嵌入式系统中,包括航空航天和国防、汽车、商用车辆、重型机械、工业控制、医疗、铁路和机器人。BlackBerry QNX 成立于 1980 年,总部位于加拿大渥太华,并于 2010 年被 BlackBerry 收购。

此系统的客户https://blackberry.qnx.com/en/partners/blackberry-qnx-partners

图片

此系统的应用开发

https://www.qnx.com/developers/docs/8.0/com.qnx.doc.neutrino.prog/topic/process_Sample_using_wait.html

图片

/*  * waitchild.c * * This is an example of a parent process that creates some child * processes and then waits for them to terminate. The waiting is * done using wait(). When a child process terminates, the * wait() function returns.*/
#include <spawn.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>
main(int argc, char **argv){    char                *args[] = { "child", NULL };    int                 i, status;    pid_t               pid;    struct inheritance  inherit;
    // create 3 child processes    for (i = 0; i < 3; i++) {        inherit.flags = 0;        if ((pid = spawn("child", 0, NULL, &inherit, args, environ)) == -1)            perror("spawn() failed");        else            printf("spawned child, pid = %d\n", pid);    }
    while (1) {        if ((pid = wait(&status)) == -1) {            perror("wait() failed (no more child processes?)");            exit(EXIT_FAILURE);        }        printf("a child terminated, pid = %d\n", pid);                if (WIFEXITED(status)) {            printf("child terminated normally, exit status = %d\n",                WEXITSTATUS(status));        } else if (WIFSIGNALED(status)) {            printf("child terminated abnormally by signal = %X\n",                WTERMSIG(status));        } // else see documentation for wait() for more macros    }}
#include <stdio.h>#include <stdlib.h>#include <pthread.h>
void*  function( void*  arg ){   printf( "This is thread %d\n", pthread_self() );   return( 0 );}
int main( void ){   pthread_attr_t attr;
   pthread_attr_init( &attr );   pthread_attr_setdetachstate(      &attr, PTHREAD_CREATE_DETACHED );   pthread_create( NULL, &attr, &function, NULL );
   /* Allow threads to run for 60 seconds. */   sleep( 60 );   return EXIT_SUCCESS;}
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <stdlib.h>
char buffer[] = { "A text record to be written" };
int main( void ){    int  fd;    int  size_written;
    /* open a file for output          */    /* replace existing file if it exists */    fd = creat( "myfile.dat", S_IRUSR | S_IWUSR );
    /* write the text              */    size_written = write( fd, buffer,              sizeof( buffer ) );
    /* test for error              */    if( size_written != sizeof( buffer ) ) {        perror( "Error writing myfile.dat" );        return EXIT_FAILURE;    }
    /* close the file              */    close( fd );
    return EXIT_SUCCESS;}
#include <string.h>#include <stdio.h>#include <sys/json.h>    typedef struct {    const char *path;    int type;    long long size;} info_t;
typedef struct {    int id;    info_t info;} file_t;
bool extract_file_info(const char *str, file_t *file_info){    json_decoder_t *dec = json_decoder_create();    json_decoder_parse_json_str(dec, str);        // Pre-initialise the structure so that omitted optional fields have default values    memset(file_info, 0, sizeof(*file_info));    file_info->info.type = 1;
    // Extract data from the decoder. One can choose to check each call for success if    // it's important to report precise errors. Alternatively, as is done here, one can     // ignore intermediate errors and just check the final status.    json_decoder_push_object(dec, NULL, false);    json_decoder_get_int(dec, "id", &file_info->id, false);        json_decoder_push_object(dec, "info", false);    json_decoder_get_string(dec, "path", &file_info->info.path, false);    // The 'type' is optional. If not present, the call will fail but will not affect    // the decoder's status. We've initialized the field to the value it should have    // if not present, so it doesn't have to be there.    json_decoder_get_int(dec, "type", &file_info->info.type, true);    // The 'size' is also optional.    json_decoder_get_int_ll(dec, "size", &file_info->info.size, true);
    json_decoder_error_t status = json_decoder_get_status(dec, true);
    // While one might usually use a decoder to decode multiple strings, we just free it    json_decoder_destroy(dec);
    // If everything above has succeeded, json_decoder_get_status() will return     // JSON_DECODER_OK    if ( status != JSON_DECODER_OK ) {        printf("Data extraction failed\n");        return false;    }
    return true;}

虚拟飞机,船舶等模拟器

https://flightsim.to/(这个网站好玩)

图片

飞机及模拟器项目软件

图片

其旗舰产品 VAPS 和 VAPS XT 生成的代码已部署到全球数百架飞机上,我们的嵌入式图形软件已在全球 30 多个主要飞机项目中获得认证。

https://www.presagis.com/en/product/ua-accelerator/

图片

图片

图片

图片

限于篇幅就写这么多了,其中大家应该也看了C/C++编程语言的威力了,比如一个JAVA配套的东西open jdk,oracle jdk,spring全家桶,idea intellij等下面的东西全是欧美程序员在占据并且深耕了多年,形成了极强的技术优势和国际市场,积累了底层C/C++/ASM的经验几十年,在以英语为国际通用语言的优势加持,更容易的触达国际市场,不少公司已经成立了几十年,客户遍布全球,编译器,解释器,IDE,操作系统,芯片,指令集,商业软件,工业科技,航天飞机等全是老外在折腾,在占据主导大份额市场,对于经济波动抵御能力强,毕竟用户是整个全球市场,而国内一堆程序员全挤在小小的应用层里扎堆,只面对国内自已的用户小市场挤来挤去,还搞不过人家,失业饿肚子,跟我一样饿肚子的程序员太多了。

真要真正的搞技术,就要明白应用层目前太挤了,需求跟不上人才供给,最好往下走,先去消化阅读分析github上的大型C/C++项目积累经验,才有可能有机会做上面列举的商业软件,也才有能力去参与老外的开源项目,也才有更多的可能和机会。

图片

图片

欢迎友善讨论和评论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平板电容笔哪个牌子好?精选电容笔品牌排行榜前五名推荐!

在当今时代&#xff0c;平板电容笔已经成为平板电脑的重要配件&#xff0c;为人们的学习、工作和创作带来了极大的便利。然而&#xff0c;市场上平板电容笔的品牌众多&#xff0c;质量和性能也参差不齐&#xff0c;这让消费者在选择时常常感到困惑。平板电容笔究竟哪个牌子更好…

Revit 2018 提示 您使用的 Revit 授權無效。

昨天晚上想学下BIM&#xff0c;安装了这个软件&#xff0c;忘了给他断网了&#xff0c;今天早上起来一直提示这个信息&#xff0c;通过查看进程的位置找到了一个acwebbrowser 路径如下&#xff1a;C:\Program Files\Common Files\Autodesk Shared\CLM\V5\MSVC14\cliccore 防火…

如何使用 Rust 框架进行 RESTful API 的开发?

一、RESTful API 的开发 使用 Rust 框架进行 RESTful API 开发&#xff0c;你可以选择多种流行的 Rust Web 框架&#xff0c;如 Actix-web、Rocket、Warp 和 Tide 等。以下是使用这些框架进行 RESTful API 开发的基本步骤和概念&#xff1a; 选择框架&#xff1a;根据项…

OpenAI-gym how to implement a timer for a certain action in step()

题意&#xff1a;OpenAI-gym 如何在 step() 中为某个动作实现一个计时器 问题背景&#xff1a; One of the actions I want the agent to do needs to have a delay between every action. For context, in pygame I have the following code for shooting a bullet: 我希望代…

从趋势到常态:TikTok定制化产品的崛起与变革

随着数字化和TikTok的发展&#xff0c;定制化产品在消费者日常生活中愈发普及&#xff0c;逐渐从一种时尚潮流转变为常态。这一转变不仅改变了消费者的购物方式&#xff0c;也重塑了市场的供需关系、产品设计理念和商业模式。本文Nox聚星将和大家探讨TikTok定制化产品的未来发展…

QT 数据加密

一.使用环境 应该是通用的,此测试版本为如图 二.使用代码 1. 运行代码 QString data = "123abcAbc.-+";qDebug() << "加密:" << QAESEncryption::encodedText(data, "填入自己秘钥");qDebug() << "解密:" <…

Qemu开发ARM篇-4、kernel交叉编译运行演示

文章目录 1、kernel编译2、运行kernel3、FAQ 在前一篇 Qemu开发ARM篇-3、qemu运行uboot演示中&#xff0c;我们演示了如何使用 qemu运行uboot&#xff0c;在该篇中&#xff0c;我们将演示如何交叉编译 kernel并在qemu中运行 kernel. 1、kernel编译 本次演示使用kernel版本…

Java 中使用 Gson 实现深度克隆 #什么是深克隆与浅克隆?#clone方法为什么不能直接通过某个对象实例在外部类调用?

&#x1f310;Gson的jar包提供到本文上方&#xff0c;欢迎自取&#x1f310; 前言 &#x1f310;在 Java 编程中&#xff0c;克隆对象是一项常见的需求&#xff0c;特别是在处理不可变对象、避免引用传递时&#xff0c;深度克隆显得尤为重要。虽然 Java 提供了 clone() 方法&a…

【线程安全】如何区分线程安全还是线程不安全? 一文解释清楚线程安全问题,解释什么是锁重用、锁竞争、分段锁

线程安全问题 是一个重难点&#xff0c;编程就是这样&#xff0c;有的时候自己无论如何苦思冥想也弄不明白&#xff0c;但如果有人指点一二就能豁然开朗&#xff0c;希望本文可以给各位同学带来帮助 本文作者&#xff1a; csdn 孟秋与你 文章目录 如何判断一个类是否线程安全是…

抖音截流神器发布:不限量评论采集,实时推送,提升运营效率

在短视频风靡的今天&#xff0c;抖音成为品牌营销的新战场。如何在海量内容中脱颖而出&#xff0c;提升运营效率成为关键。本文将揭秘一款革命性的抖音运营工具&#xff0c;它不仅支持不限量评论采集&#xff0c;还实现了实时推送功能&#xff0c;助力运营者精准把握用户反馈&a…

解决事务提交延迟问题:Spring中的事务绑定事件监听机制解析

目录 一、背景二、事务绑定事件介绍三、事务绑定事件原理四、结语 一、背景 实际工作中碰到一个场景&#xff0c;现存系统有10w张卡需要进行换卡&#xff0c;简单来说就是为用户生成一张新卡&#xff0c;批量换卡申请需要进行审核&#xff0c;审核通过后异步进行处理。 为什么…

C++中string的使用

文章目录 string类对象的常见构造string类对象的容量操作size() / length()&#xff1a;返回字符串的长度&#xff08;字符数&#xff09;。capacity()&#xff1a;返回当前字符串分配的容量&#xff08;即在重新分配内存前可以保存的字符数&#xff09;。检查是否为空&#xf…

大数据可视化-三元图

三元图是一种用于表示三种变量之间关系的可视化工具&#xff0c;常用于化学、材料科学和地质学等领域。它的特点是将三个变量的比例关系在一个等边三角形中展示&#xff0c;使得每个点的位置代表三个变量的相对比例。 1. 结构 三个角分别表示三个变量的最大值&#xff08;通常…

Centos7.9 使用 Kubeadm 自动化部署 K8S 集群(一个脚本)

文章目录 一、环境准备1、硬件准备&#xff08;虚拟主机&#xff09;2、操作系统版本3、硬件配置4、网络 二、注意点1、主机命名格式2、网络插件 flannel 镜像拉取2.1、主机生成公私钥2.2、为啥有 Github 还用 Gitee2.3、将主机公钥添加到 Gitee2.3.1、复制主机上的公钥2.3.2、…

【C++篇】走进C++标准模板库:STL的奥秘与编程效率提升之道

文章目录 C STL 初探&#xff1a;打开标准模板库的大门前言第一章: 什么是STL&#xff1f;1.1 标准模板库简介1.2 STL的历史背景1.3 STL的组成 第二章: STL的版本与演进2.1 不同的STL版本2.2 STL的影响与重要性 第三章: 为什么学习 STL&#xff1f;3.1 从手动编写到标准化解决方…

FortiGate 防火墙 DNS 地址转换(DNS Translation)

简介 本例介绍 FortiGate 防火墙 DNS 地址转换&#xff08;DNS Translation&#xff09;配置方法。 一、 网络结构 网络结构如下图&#xff0c;PC1 连接在 FG60B 的 Internal 接口&#xff0c;FG60B 的 Wan1 接口连接 FG80CM 的 DMZ 接口&#xff0c;Wan1 接口开启 DNS 服务…

无人机之工作温度篇

无人机的工作温度是一个相对复杂的问题&#xff0c;因为它受到多种因素的影响&#xff0c;包括无人机的类型&#xff08;如民用、军用&#xff09;、设计规格、应用场景以及环境条件等。以下是对无人机工作温度范围的详细解析&#xff1a; 一、正常工作温度范围 一般来说&…

LeetcodeTop100 刷题总结(二)

LeetCode 热题 100&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 文章目录 八、二叉树94. 二叉树的中序遍历&#xff08;递归与非递归&#xff09;补充&#xff1a;144. 二叉树的前序遍历&#xff08;递归与非递归&#xff09;补充&#xff1a;145. 二叉树的后序遍…

RK3568驱动指南|第十六篇 SPI-第190章 配置模式下寄存器的配置

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

JavaEE---Spring之小练习

实现一个验证码项目 后端代码 后端代码测试 整体代码测试 输入正确的验证码 输入错误的验证码