WEB领域是不是黄了还是没黄
进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。
中国程序员在应用层的集中
-
市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是在电子商务、社交网络、移动支付等领域。这些领域的快速发展催生了大量对应用层开发的需求,因此许多中国程序员专注于使用现成的框架和技术来快速构建应用程序。
-
企业需求:许多中国企业更注重短期收益和市场占有率,因此更加倾向于快速迭代产品和服务,而不是投入大量资源进行底层技术的研发。这导致了很多程序员的工作集中在业务逻辑实现上,即CRUD操作。
-
教育和培训:中国的高等教育和职业培训机构往往更侧重于教授实用技能,以便学生能够迅速就业。这种倾向可能导致更多人学习如何使用现有工具和框架,而不是深入研究底层原理。
国外程序员的优势
-
历史积累:许多基础技术和框架起源于国外,特别是美国和欧洲。这些国家和地区在计算机科学和软件工程领域有着悠久的历史,积累了大量的经验和知识。
-
开源文化:西方国家拥有浓厚的开源文化,许多优秀的开源项目都是由国外开发者发起并维护的。这种文化鼓励技术创新和共享,使得国外程序员更容易参与到核心技术的开发中。
-
国际化视野:英语作为国际通用语言,为国外程序员提供了更多的交流机会和获取最新信息的途径。他们可以更方便地参与国际会议、阅读英文文档和教程,从而保持在技术前沿。
-
资金支持:一些大型科技公司如Google、Microsoft、Oracle等,在技术研发上有巨大的投入。这些公司在推动技术进步的同时,也为程序员提供了良好的工作环境和发展平台。
英语的优势
-
国际交流:英语是国际科技会议、论坛和开源社区的主要交流语言。掌握英语可以帮助程序员更好地参与这些活动,从而获取最新的技术和行业动态。
-
文档与资源:很多高质量的技术文档、教程和在线课程都是英文的。能够无障碍阅读这些资料有助于程序员更快地学习新技术。
-
全球就业机会:对于那些希望在全球范围内寻找工作机会的程序员来说,良好的英语能力可以打开更多大门。
国内程序员和国外程序员面对的环境问题
-
劳动力市场结构:在一些发达国家,如美国,IT行业的发展更为成熟,企业对于技术人才的需求稳定且持续增长。同时,这些国家的教育体系和职业培训机制往往能够较好地与市场需求对接,培养出符合行业需求的人才。
-
法律法规保护:西方国家通常有更完善的劳动法律体系来保护员工权益,比如解雇程序较为复杂,需要给出正当理由,并提供相应的补偿。这使得企业在裁员时会更加谨慎。
-
社会保障体系:很多西方国家拥有完善的社会保障网络,包括失业保险、再就业培训等服务,为失业人员提供了更多的缓冲和支持,帮助他们更快地重返工作岗位。
-
工会力量:在某些国家,工会的力量较强,可以代表员工与雇主谈判,确保员工获得更好的工作条件和待遇,同时也减少了无故解雇的情况。
-
企业文化差异:西方国家的企业文化可能更注重员工的工作生活平衡,较少出现长时间加班的现象,这样的环境有助于保持员工的工作热情和创造力,从而减少因过度劳累导致的职业倦怠或离职。
-
技能更新和终身学习:在一些发达国家,企业和政府都鼓励并支持员工进行持续的学习和个人发展,以便适应不断变化的技术环境。这种对个人成长的投资可以帮助程序员保持竞争力,降低失业风险。
-
国际化视野:由于英语作为国际通用语言的优势,西方国家的程序员更容易参与全球项目,接触到国际市场的机会也更多,这增加了他们的就业机会。
-
创新和技术领先地位:一些发达国家在技术创新方面处于领先地位,这意味着它们有更多的高薪岗位和高级职位,这些职位往往更能抵御经济波动的影响。
-
经济稳定性:虽然全球经济都有周期性的波动,但是一些发达国家的经济相对稳定,即使在经济不景气的时候,也能通过各种政策措施来缓解失业问题。
国内大批程序员高度集中在应用层居多,在应用层框架和语法使用者居多,加上环境的影响往往比较重视快,加班,而专研做底层的往往很少,比如一个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++项目积累经验,才有可能有机会做上面列举的商业软件,也才有能力去参与老外的开源项目,也才有更多的可能和机会。
欢迎友善讨论和评论。
相关文章:

WEB领域是不是黄了还是没黄
进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。 中国程序员在应用层的集中 市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是…...
Android系统:系统架构
文章目录 分层设计分块设计总结 分层设计 自上而下分为:应用层、应用架构层、系统运行层、硬件抽象层、Linux内核层 应用层 封装一系列系统App 应用架构层(Framework) 封装一系列运行App需要的Java框架 提供App开发需要的API 系统运行层(Libraries) 封装一系…...

NCNN 源码(1)-模型加载-数据预处理-模型推理
参考 ncnn 第一个版本的代码。 0 整体流程 demo:squeezenet ncnn 自带的一个经典 demo:squeezenet 的代码: // 网络加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_…...
重修设计模式-结构型-享元模式
重修设计模式-结构型-享元模式 复用不可变对象,节省内存 享元模式(Flyweight Pattern)核心思想是通过共享对象方式,达到节省内存和提高性能的目的。享元对象需是不可变对象,因为它会被多处代码共享使用,要避…...
JavaScript 运算符
JavaScript 中的运算符可以根据其功能和用途分为几类。以下是主要的运算符类型及其用法: 1. 算术运算符 用于执行基本的数学运算。 : 加法 let sum 5 3; // 8- : 减法 let difference 5 - 3; // 2* : 乘法 let product 5 * 3; // 15/ : 除法 let quotient 5…...

3.js - 运动曲线
这个球,绕着这个红色的线圈转 代码 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlslet scene,camera,renderer,controls nulllet moon,earth null// 根据,一系列的点,创建曲线 le…...

免费ppt模板哪里找?职场必备这些利器
一眨眼,9月份的尾声渐近,无论是学生还是职场人士,都开始准备着新一轮的演讲和报告。在这个忙碌的时期,一份精美的PPT模板能够大幅提升你的工作效率,让你的演示更加引人入胜。 不用担心高昂的版权费用,市场…...
wampserve 配置本地域名,出现错误
概述 今天更换了电脑,在本地安装和配置docker的时候,想用自定义域名访问NGINX容器,127.0.0.1和localhost都可以访问,但是自定义域名无法访问, 接着去捯饬已经使用的wampserver的集成环境,出现了同样的问题…...

MySQL慢查询优化指南
博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 当遇到慢查询问题时,不仅影响服务效率,还可能成为系统瓶颈。作为一位软件工程师,掌握MySQL慢查询优化技巧至关重要。今天,我们就来一场“数据库加速之旅…...

怎么录制游戏视频?精选5款游戏录屏软件
对于热爱游戏的你来说,记录游戏中的精彩瞬间并分享给朋友或粉丝,无疑是一种享受。然而,在众多录屏软件中,如何选择最适合你的那一款?今天,我们就为大家精选了五款游戏录屏软件,需要的朋友快来选…...

论文阅读 - MDFEND: Multi-domain Fake News Detection
https://arxiv.org/pdf/2201.00987 目录 ABSTRACT INTRODUCTION 2 RELATED WORK 3 WEIBO21: A NEW DATASET FOR MFND 3.1 Data Collection 3.2 Domain Annotation 4 MDFEND: MULTI-DOMAIN FAKE NEWS DETECTION MODEL 4.1 Representation Extraction 4.2 Domain Gate 4.…...

LabVIEW软件出现Bug如何解决
在LabVIEW开发中,程序出现bug是不可避免的。无论是小型项目还是复杂系统,调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug,包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…...
【数据结构-栈】力扣844. 比较含退格的字符串
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。 注意:如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s “ab#c”, t “…...

DataFrame生成excel后为什么多了一行数字
问题描述 python查询数据生成excel文件,生成的excel多了第一行数字索引,1,2,3,4,5...... 代码: df pd.DataFrame(data)df.to_excel(filename, sheet_name用户信息表, indexFalse) 解决: 原理也很简单,就是设置个参…...
linux 内存屏障(barrier)分析
谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏,栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…...

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)
目录 一、引言 二、文生文(text2text-generation) 2.1 概述 2.2 Flan-T5: One Model for ALL Tasks 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.3.3 pipeline返回参数 …...

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue
TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全…...

MODBUS TCP 转 CANOpen
产品概述 SG-TCP-COE-210 网关可以实现将 CANOpen 接口设备连接到 MODBUS TCP 网络中。用户不需要了解具体的 CANOpen 和 Modbus TCP 协议即可实现将CANOpen 设备挂载到 MODBUS TCP 接口的 PLC 上,并和 CANOpen 设备进行数据交互。 产品特点 …...

vue2+elementUI实现handleSelectionChange批量删除-前后端
功能需求:实现选中一个或多个执行批量删除操作 在elementUI官网选择一个表格样式模板,Element - The worlds most popular Vue UI framework 这里采用的是 将代码复制到前端,这里是index.vue <template><el-button type"dang…...
LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略
LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略 目录 llm_aided_ocr的简介 1、特性 2、详细技术概览 PDF处理和OCR PDF到图像转换 OCR处理 文本处理流程 分块创建 错误校正与格式化 重复内容移除 标题和页码…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...