编程学习的心路历程和困惑回顾
回首入行9年的经历,从大一开始学习C语言和数据结构,老师一直是在用IDE演示程序的编写和运行,我们也就一直在跟黑乎乎的命令行窗口打交道。
后来在一些课程的实验环节,接触到了一些别人编写好的工程代码,知道了Makefile和make,从而得知了抛开IDE在命令行手动编译c程序的办法。
还记得C语言课程设计就是开发一个学籍管理系统,用文件存储数据,不用数据库(那个时候还不知道数据库),要求选择文字界面,或者图形界面。
当时跟着课程实验的指导书,以为那个就是图形界面,过了很多年才知道,那个虽然显示一些数据列表,但是仍然是文字界面,因为程序输入输出都是在命令行窗口里。
当时有同学用了gtk写界面,让人感觉的十分高大上,不明觉厉。跟gtk做出来的图形界面相比,课程实验指导书后面的操作界面实在是难看、low、拿不出手。但是没有办法,因为一开始并不知道有gtk的存在,也不知道该怎么用c语言写图形界面,更没有学长学姐可以问,也没有跟同学充分沟通交流他们怎么写图形界面,完完全全就是自己闷头照抄实验指导书的代码。等我发现有同学在用gtk写出很好看的图形界面的时候,时间已经来不及了,我已经没有时间去换成gtk,只能硬着头皮硬上。而且当时感觉gtk写出来的界面这样好看,肯定学起来很麻烦、很困难。
后来做操作系统课程设计的时候,也是要求要有图形界面,当时有个实验课助教,告诉我们c++可以用Qt写界面,后面开始学习Qt。
后来做数据库课程设计的时候,也是要求要有图形界面,当时有个实验课助教,告诉我们图形界面可以用c#来写。当时就觉得很厉害,心里也在感叹,这些助教、这些学长学姐实在是太厉害了,会好多种编程语言。因为当时学校里只教c语言,c++还是选修课。但是这些助教、这些学长学姐会很多,除了c/c++语言以外还会Java、Python、C#、Javascript,会写网站,会写图形界面,实在是太厉害了。但是当时由于畏惧新学习一门语言的困难,所以还是继续使用Qt完成数据库课程设计。
现在想想自己自学能力大幅提升也就是在那个环境下被逼出来的。但是其实我非常不喜欢那种氛围,学长、学姐、老师总是喜欢叫我们自己百度,自己查。根本没有人给我们做背景介绍和常识介绍。根本没有场合交流这些东西。
学校里有很多的技术俱乐部,据说在那些社团里面就是整天讨论这些,但是想要进入这些社团是有门槛和条件的,会有申请和考核,很不好进去的。那些社团里的人三年以后掌握了很多技术,十分有利于毕业找工作。
在学院同一届的学生里,也有很多很厉害的人,他们会很多的技术,什么安卓开发,IOS开发,Web开发,不仅如此,他们还会很多的编程语言。
所以在同学之间关于这些知识的学习存在着很大的差别,有的人走的很远,有的人除开学校教的内容以外什么都不会,以至于后者在问问题的时候会问很多在前者看来很蠢、很白痴的问题。在前者看来就是常识性的东西,居然有人还不知道。他们有的时候都不愿意回答,让你自己百度上网查。有的时候还会奚落你几句,可能他是无心的,但是已经足够让你知道自己在问一个多么蠢的问题,以至于激起了自己的自尊心和羞耻感,觉得自己总是在问一些很蠢的问题,问这些问题很丢人,所以后面渐渐的没有人问了,都自己查,闷着头自己做,很少与人交流。但是没有人引导,自己弄清楚这些问题十分的困难。一度让自己觉得非常的自卑,自己闷头学习所遇到的巨大困难,一次次的在劝退自己。
现在回想起来,这种环境的氛围十分糟糕。因为大家都在攀比,在炫耀,在给那些走的比较远、懂得比较多的同学戴高帽,在吹捧那些同学,同时在打击其他同学学习的积极性和自尊心。而不是在相互学习和交流。
中途在学习汇编语言的时候,在课本最后一章,莫名其妙的介绍了win32 API编程,老师还在课堂上演示了win32 API编程。可是当时学的昏头昏脑、云里雾里的,也不知道有什么用,用来干什么。现在想想,最讨厌这种蜻蜓点水式的东西,只给你介绍了一些微末的东西,连入门都不算。
中途在听学Java Web的同学介绍各种Java Web的框架的时候,听说了一些tomcat、servlet、JSP、Ajax、jQuery、Javascript、css、html、Spring、Structs、Hibernate,还有什么COM、MFC、.NET、.NET Framework、win32 API、ASP.NET,实在是令人头痛,感觉课外学习压力巨大。
学习这些课程的过程中遇到的这些问题,由于忙着赶各种作业、准备实验、写实验报告、准备考试,都没有时间去弄明白。寒暑假的时候,只顾着赶紧回家玩了,更没有规划出时间来把这些弄明白。
好像扯远了,本文一开始是想说命令行程序、文字界面和图形界面的。
言归正传,从一开始黑乎乎的命令行窗口,到后来的gtk、Qt、c#,win32等图形界面。最近在看c/c++的文档的时候,发现一个很大的问题。原以为,c的标准库里有很多东西,只是我们不知道罢了,结果发现很多都没有。什么网络编程、进程、线程,全都没有。但是我又记得,我在windows环境下写一个邮件客户端,当时就是用了套接字。可是c的标准库里却没有。
在查阅了微软的文档技术文档 | Microsoft Learn以后,我惊讶的发现,套接字和网络编程真的不是c语言的标准,不仅如此,连进程线程都不是。这些全都依赖于开发环境所在的操作系统,linux和windows都分别有支持。网络协议栈,什么tcp、udp、ip、套接字,全都是操作系统内核的东西,不同的操作系统,实现不一样,接口也不一样。
C语言和C++语言,跟Python、Java真的是太不一样了。Python、Java提供了各种各样的库,甚至对第三方开源库也十分的支持,使用简便,还跨平台。但是C语言和C++语言就不跨平台,就拿套接字、网络编程、进程、线程来说,如果你用C语言或者C++语言来写套接字、网络编程、进程、线程相关的代码,你要十分明确自己所在的开发环境和以后代码正式运行的环境是在哪个操作系统,因为在不同的操作系统下,#include需要引入的头文件和使用的函数是不一样的。这些依赖于操作系统的头文件,以及函数的具体实现是操作系统提供的c库/c++库,引入这些库,也是环境配置的一部分工作,否则编译链接会有问题的。
就当初在windows环境下写一个邮件客户端使用了套接字这一问题,我查阅了微软的文档技术文档 | Microsoft Learn以后发现当初确实是使用了windows的库。
在这个文档里,我也搞清楚了,当初那些名词COM、c#、.NET、.NET Framework、win32 API、MFC、ASP.NET是怎么回事。
win32 API 是windows给c语言提供的库和接口,可以用来写界面、访问网络,以及其他各种c标准里没有的事情。
MFC是一个C++类库和框架,也可以用来写界面,在win32 API和COM API的基础上包装了一层。
ASP.NET是用来开发网站的。
.NET Framework是一种技术,支持生成和运行 Windows 应用及 Web 服务。
.NET是一个免费的、跨平台的、开源的开发平台,用于生成多种类型的应用程序。包括控制台应用、web应用、桌面应用、游戏、手机APP、windows服务。
C#是.NET开发用的语言。
COM不是一种语言,不是一个库,只是一个用c++语言写的编程接口。类似于JAVA中的interface,只有函数说明,没有函数实现,使用虚基类弄的。目的就是为了规范编程,作为一种编程范式。
Linux系统为C语言提供的库和API叫做glibc.
相关文章:
编程学习的心路历程和困惑回顾
回首入行9年的经历,从大一开始学习C语言和数据结构,老师一直是在用IDE演示程序的编写和运行,我们也就一直在跟黑乎乎的命令行窗口打交道。 后来在一些课程的实验环节,接触到了一些别人编写好的工程代码,知道了Makefile…...
请介绍类加载过程,什么是双亲委派模型?
第23讲 | 请介绍类加载过程,什么是双亲委派模型? Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件,也是个面试考察热点。 今天我要问你的问题是࿰…...
Navisworks编辑材质和Revit快速切换材质问题
一、如何在Navisworks2016中编辑材质 初次使用NW2016-2017时发现,原来用于创建编辑材质的小地球不见了,如图1所示,在各大技术群里求助没有回应,度娘搜索也总是摇头。 经过仔细排查可能出现的地方,终于找到了可以编辑材…...
Object对象键值的输出循序到底如何排列的?
1.日常摸鱼看八股 今天又是复习八股文的一天,发现还是彻底懂得原理才好和面试官吹牛批呀。 接着来看看我chat大宝贝的回答: 在现代浏览器中,Object 对象的键值输出循序是比较稳定的,通常是按照如下顺序输出: 所有的数…...
气泡式水位计的安装方法详解
气泡水位计的安装实际上就是气管的安装,气管的安装是否正确将直接影响到仪器测量数据的结果,气泡水位计它由活塞泵产生的压缩空气流经测量管和气泡室,进入被测的水体中,测量管中的静压力与气泡室上的水位高度成正比。那么接下来就…...
求“二维随机变量的期望E(X)与方差D(X)”例题(一)
离散型 设随机变量(X,Y)的联合分布律为 X\Y0100.10.210.30.4 (1)求E(X) 先求x的边缘分布律,表格里x0的概率为0.10.2,于是我们可得 X01P0.30.7直接求E(X)即可,得到结果 (2)求E(XY) 直接x与y相乘就行。 记得别乘多了,别的算了又…...
MySQL 搞定行转列,列转行
行转列方法总结1、使用case…when…then2、使用SUM(IF()) 生成列3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行4、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total5、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用…...
正点原子裸机开发之C语言点灯程序
一. 简介 本文针对 IMX6ULL 的裸机开发的(即不带Linux操作系统的开发)。 主要分两部分的工作: 1. 配置 C语言运行环境 2. C 语言编写及运行 二. 配置C语言运行环境 配置 C 语言运行环境的工作分 三部分。如下: 1. 设置…...
cv::阈值分割OTUS原理+代码
opencv库的阈值分割分为全局分割和局部分割全局分割:普通分割ret1,th1 cv2.threshold(img,127, 255, cv2.THRESH_BINARY) #127为阈值 #cv2.THRESH_BINARY |cv2.THRESH_BINARY_INV | cv2.THRESH_TRUNC|cv2.THRESH_TOZERO|cv2.THRESH_TOZERO_INV局部分割:…...
Postgresql-12.5 visual studio-2022 windows 添加pg工程并调试
pg内核学习,记录一下 文章目录安装包编译安装VS添加Postgresql工程调试源码安装包 (1)perl下载 https://www.perl.org/get.html (2)diff下载 http://gnuwin32.sourceforge.net/packages/diffutils.htm (…...
长沙学院2023 第一次蓝桥训练题解
每道题都在洛谷上,每个题都有很详细的题解,可以先自行做,不会再看题解。 题目解析思路都写在代码中,中文题面就不单独解释题意了。 P2440 木材加工(二分答案) 链接:P2440 木材加工 解析 代码…...
云端Docker搭建ABY库以及本地CLion使用
文章目录ABY的搭建以及使用前言ABY库的下载、安装及测试CLion配置后续杂项项目改名使用其他的库最后ABY的搭建以及使用 前言 仅做记录,仅供参考,不同人有不同的使用方式命令手敲,可能有错,自己辨识勿问,我懂的也不多…...
ES6-箭头函数、解构赋值、对象简写
箭头函数特点 1、 (只有1个形参) 可以省略() 2、 {} 可以省略 只有一句代码 或 只有返回值的时候,省略return 3、arguments 不可用,arguments在没有形参的时候可以拿到调用函数拿在的实参 获取伪数组通过Array.from转为真数组。 4、 箭头函数没有this, …...
【CSS】CSS 背景设置 ② ( 背景位置 | 背景位置-方位值设置 )
文章目录一、背景位置1、语法说明2、注意事项二、背景位置-方位值设置1、效果展示2、完整代码示例一、背景位置 1、语法说明 如果 盒子的大小 大于 背景图片的大小 , 默认的 图片 位置是 左上角 ; 设置背景位置的 CSS 语法如下 : background-position : length length backgro…...
HTML 扫盲
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录前言HTML 结构快速生成代码框架HTML 常见标签注释标签标题标签: h1-h6段落标签:p换行标签:br格式化标签…...
项目中用到的责任链模式
目录 1.什么是责任链?它的原理是什么? 2.应用场景 3.项目中的应用 传送门:策略模式,工作中你用上了吗? 1.什么是责任链?它的原理是什么? 将请求的发送和接收解耦,让多个接收对象…...
C++复习笔记--STL的string容器和vector容器
1--string容器string 本质上是一个类,其不同于指针 char*,string 类的内部封装了 char*,用于管理字符串,是一个 char* 型的容器;1-1--string构造函数string 的构造函数原型:string(); // 创建一个空的字符串…...
第一章 软件项目管理概述
项目(Project)是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。项目的特征PMBOK(A guide to the Project management Body Of Knowledge:项目管理知识体系指南)五大过程组和十大知识领域从时间角度出发,项目管理分为五大过程组:启动…...
【Linux系统编程】06:共享内存
共享内存 OVERVIEW共享内存一、文件上锁flock二、共享内存1.关联共享内存ftok2.获取共享内存shmget3.绑定共享内存shmat4.绑定分离shmdt5.控制共享内存shmctl三、亲缘进程间通信1.共享内存写入与读取2.共享内存解绑与删除3.共享内存综合四、非亲缘进程间通信1.通过sleep同步2.通…...
【专项】112. 路径总和
112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
Linux入门课的思维导图
耗时两周,终于把慕课网上的Linux的基础入门课实操、总结完了! 第一次以Blog的形式做学习记录,过程很有意思,但也很耗时。 课程时长5h,涉及到很多专有名词,要去逐个查找,以前接触过的概念因为时…...
大模型智能体核心技术:CoT与ReAct深度解析
**导读:**在当今AI技术快速发展的背景下,大模型的推理能力和可解释性成为业界关注的焦点。本文深入解析了两项核心技术:CoT(思维链)和ReAct(推理与行动),这两种方法正在重新定义大模…...
WEB3全栈开发——面试专业技能点P8DevOps / 区块链部署
一、Hardhat / Foundry 进行合约部署 概念介绍 Hardhat 和 Foundry 都是以太坊智能合约开发的工具套件,支持合约的编译、测试和部署。 它们允许开发者在本地或测试网络快速开发智能合约,并部署到链上(测试网或主网)。 部署过程…...
【Docker 02】Docker 安装
🌈 一、各版本的平台支持情况 ⭐ 1. Server 版本 Server 版本的 Docker 就只有个命令行,没有界面。 Platformx86_64 / amd64arm64 / aarch64arm(32 - bit)s390xCentOs√√Debian√√√Fedora√√Raspbian√RHEL√SLES√Ubuntu√√√√Binaries√√√ …...
鸿蒙APP测试实战:从HDC命令到专项测试
普通APP的测试与鸿蒙APP的测试有一些共同的特征,但是也有一些区别,其中共同特征是,它们都可以通过cmd的命令提示符工具来进行app的性能测试。 其中区别主要是,对于稳定性测试的命令的区别,性能指标获取方式的命令的区…...
