编程学习的心路历程和困惑回顾
回首入行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 。 叶子节点 …...
【数据结构】堆排序
堆是一种叫做完全二叉树的数据结构,可以分为大根堆,小根堆,而堆排序就是基于这种结构而产生的一种程序算法。大堆:每个节点的值都大于或者等于他的左右孩子节点的值小堆:每个结点的值都小于或等于其左孩子和右孩子结点…...
论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》
核心思想 本文提出一种基于图对抗神经网络的图匹配算法(GAMnet),使用图神经网络作为生成器分别生成源图和目标图的节点的特征,并用一个多层感知机作为辨别器来区分两个特征是否来自同一个图,通过对抗训练的办法提高生成器特征提取…...
数据安全—数据完整性校验
1、数据安全保障三要素即 保密性 完整性、可用性机密性:要求数据不被他人轻易获取,需要进行数据加密。完整性:要求数据不被他人随意修改,需要进行签名技术可用性:要求服务不被他人恶意攻击,需要进行数据校验…...
Java 最小路径和
最小路径和中等给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid [[1,3,1],[1,5,1],[4,2,1]]输出&…...
Flask+VUE前后端分离的登入注册系统实现
首先Pycharm创建一个Flask项目: Flask连接数据库需要下载的包: pip install -U flask-cors pip install flask-sqlalchemy Flask 连接和操作Mysql数据库 - 王滚滚啊 - 博客园 (cnblogs.com) sqlAlchemy基本使用 - 简书 (jianshu.com) FlaskVue前后端分…...
【Go】用Go在命令行输出好看的表格
用Go在命令行输出好看的表格前言正文生成Table表头设置插入行表格标题自动标号单元格合并列合并行合并样式设置居中设置数字自动高亮标红完整Demo代码结语前言 最近在写一些运维小工具,比如批量进行ping包的工具,实现不困难,反正就是ping&am…...
怎么处理消息重发的问题?
消息队列在消息传递的过程中,如果出现传递失败的情况,发送方会重试,在重试的过程中,可能会产生重复的消息。 消息重复的情况必然存在 关于传递消息时能够提供的服务质量标准,MQTT协议给出了三种不同的标准࿱…...
JVM 运行时数据区(数据区组成表述,程序计数器,java虚拟机栈,本地方法栈)
JVM 运行时数据区JVM 运行时数据区3.1运行时的数据区组成概述3.1.1程度计数器3.1.2java虚拟机栈3.1.3本地方法栈3.1.4java堆3.1.5方法区3.2程序计数器3.3java虚拟机栈3.4本地方法栈JVM 运行时数据区 堆,方法区(元空间) 主要用来存放数据 是线程共享的. 程序计数器,本地方法栈…...
Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
ASM(自动存储管理)在数据库中是非常重要的组成部分,它可以为磁盘提供统一的存储管理、提高磁盘访问的性能和可用性、简化管理复杂度,从而为数据库的运行提供更好的支持。这里就为大家整理了墨天轮数据社区上一些ASM相关基础知识、…...
java对象的创建与内存分配机制
文章目录对象的创建与内存分配机制对象的创建类加载检查分配内存初始化零值设置对象头指向init方法其他:指针压缩对象内存分配对象在栈上分配对象在Eden区中分配大对象直接分配到老年代长期存活的对象进入老年代对象动态年龄判断老年代空间分配担保机制对象的内存回…...
什么是网络营销师/优化seo是什么
题意: 给出一个\(n(0 \leq n \leq 10^{12})\),问\(n\)个\(M\)形的折线最多可以把平面分成几部分。 分析: 很容易猜出来这种公式一定的关于\(n\)的一个二次多项式。 不妨设\(f(n)an^2bnc\)。 结合样例我们可以列出\(3\)个方程:\(f(…...
洛阳制作网站ihanshi/软件开发培训机构去哪个学校
新的一天又开始了,小威又给大家带来新的汽车养护知识, 今天的主角就是三元催化器。三元催化是指将汽车尾气排出的CO、HC和NOx等有害气体通过氧化和还原作用转变为无害的二氧化碳、水和氮气的催化。三元催化器的堵塞是个很普遍的问题的,特别是…...
个性网站建设网站/个人怎么做免费百度推广
原文链接:https://blog.csdn.net/tianyl_melodie/article/details/53424116 总结: ①在应用启动的时候,首先会创建一个进程process,然后创建ActivityThread这个对象。 ②根据我们之前学习的Handler,可以知道&#x…...
做设计的一般用什么网站找素材/无线网络优化是做什么的
背景 GB28181协议凭借其在安防流媒体行业独有的大统一地位,目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准,目前基本所有厂家的安防摄…...
建设网站需要公司吗/刚刚中国宣布重大消息
下面是我写的通用文档微机管理系统的打印部分原代码,包括合并execl单元格,加入分页符号,设置行高,列宽,设置execl页头,设置每页记录数,画单元格边框,调用execl模板等等 procedure Tf…...
wordpress登录名/网络营销的定义是什么
需要用到IRremote库文件 红外遥控按键16进制编码,使用时添加前缀 0X 红外接收 .源代码 //***************** //红外接收模块测试 //***************** #include <IRremote.h> IRrecv irrecv(6); //创建红外模块对象,并绑定红外接收模块引脚 decode_results …...