当前位置: 首页 > news >正文

编程学习的心路历程和困惑回顾

        回首入行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 开发的必要条件,也是个面试考察热点。 今天我要问你的问题是&#xff0…...

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协议给出了三种不同的标准&#xff1…...

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区中分配大对象直接分配到老年代长期存活的对象进入老年代对象动态年龄判断老年代空间分配担保机制对象的内存回…...

本地存储localStorage、sessionStorage

目录 一、localStorage 二、sessionStorage 三、本地存储处理复杂数据 一、localStorage 介绍 (1)数据存储在用户浏览器中 (2)设置、读取方便、甚至页面刷新不会丢失数据 (3)容量较大,se…...

JavaSE: 网络编程

1.1 概述java程序员面对统一的网络编程环境B/S 架构 和 C/S架构1.2 网络通信的两个要素通信双方的地址:ip 端口号网络通信协议:TCP/IP协议(事实上的国际规则)、OSI模型(理想化)1.3 Inet Address本地回环地…...

计算机图形学09:二维观察之点的裁剪

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、二维观察基本…...

2023Java 并发编程面试题

Java 并发编程 1、在 java 中守护线程和本地线程区别? java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolon…...

CAD如何绘制A0/A1/A2/A3/A4图框?

在CAD制图时,设计师一般会使用企业的定制图框模板或者个人的特色图框模板,让设计方案更加标准化、规范化。对于新人设计师而言,完成CAD制图已经非常头疼了,图框的绘制更是手忙脚乱。那么是否有更加高效的方式来完成A0、A1、A2、A3…...

R 安装 “umap-learn“ python 包

首先需要在R中下载并读取reticulate包,该包提供了一系列R-Python的交互式命令由于之前在电脑中通过三个方式安装了Python:直接安装 Python 3.10安装Anaconda,携带3.9安装 Miniconda,又是另外一个版本的Python版本各不相同&#xf…...

测试同学如何快速开发测试平台?

转眼已经好几个月没有发表什么文章了,因为疫情原因,大家工作都不怎么顺利,没有什么心情。再者,最近一直在搞移动端精准测试的项目,有太多技术难点需要攻克。从各个网站上都找不到解决方案,只能不断地尝试&a…...

【程序员接口百宝箱】免费常用API接口

一、短信发送 短信的应用可以说是非常的广泛了,短信API也是当下非常热门的API~ 短信验证码:可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商,3秒可达,99.99%到达率,支持大容量高并发。…...

使数组和能被P整除[同余定理+同余定理变形]

同余定理同余定理变形前言一、使数组和能被P整除二、同余定理变形总结参考资料前言 同余定理非常经典,采用前缀和 map,当两个余数前缀和为一个值时,则中间一段子数组刚好对P整除。但是能否找到前面是否有一段子数组和可以对P整除呐&#xf…...

25k的Java开发常问的Synchronized问题有哪些?

前言:面试高频的Synchronized问题大多集中在应用场景、底层实现原理、锁的升级过程。 文章目录 Synchronized定义应用场景对象加锁实现原理JDK6以前JDK6版本及以后对象从无锁到偏向锁转化的过程(大概讲五分钟)轻量级锁升级的过程(大概讲五分钟)自旋锁策略(大概讲五分钟)…...

ES增量同步方案

1 基于业务代码嵌入式的增量同步方式在Java业务代码要修改业务数据的地方,增加调用写入ES数据的方法优点:1、实现方式简单,可控粒度高;2、不依赖第三方数据同步框架;3、数据库不用做特殊配置和部署;缺点&am…...

计算器--课后程序(Python程序开发案例教程-黑马程序员编著-第6章-课后作业)

实例1:计算器 计算器极大地提高了人们进行数字计算的效率与准确性,无论是超市的收银台,还是集市的小摊位,都能够看到计算器的身影。计算器最基本的功能是四则运算。本实例要求编写程序,实现计算器的四则运算功能。 实…...

YOLOv5中添加SE模块详解——原理+代码

目录一、SENet1. 设计原理2. SE Block2.1 Squeeze:Global Information Embedding2.2 Excitation:Adaptive Recalibration3. SE-Inception and SE-ResNet二、YOLOv5中添加SENet1.修改common.py2.修改yolo.py3.修改yolov5s.yaml参考文章一、SENet 论文地址:Squeeze-a…...

arcgispro3.1(账号登陆)

ArcGIS Pro 3.1 更新中文概览专注于 制图、GIS、Python前言:本次更新给了我两个惊喜,一个是本来 ArcMap 就有的功能,另一个明显是学习的 QGIS,嘿嘿,大家往下看吧。整理翻译了一下官方的 ArcGIS Pro 3.1 新特性更新概览…...

VB6换个思路解决微信下载文件只读的问题(含源码)

日期:2023年3月10日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…...

Allegro如何知道组合操作命令的拼写

Allegro如何知道组合操作命令的拼写 前面介绍了如何知道单个操作命令的拼写,但如果是复合命令,就无法直观的通过命令来了解,如下图 Snap Pick to -Segment这个命令拼写是什么 如何知道,具体操作如下 点击File点击Script 出现Scripting窗口...

CDO高效处理气象数据

基础命令,只需要在终端输入命令按enter运行即可 ####### 查看文件信息 cdo infos xxx.nc #显示nc文件中的变量名 cdo showname sst.nc #读文件夹下的数据 for i in $(ls);do echo processing $i ;done #线性插值 cdo remapbil,经度纬度 input.nc output.nc ;done ##…...

1. Qt Designer Studio界面介绍

1. 说明: Qt当中的Qt Quick框架使用QML语言来快速搭建优美的界面,但是对于单纯做界面的设计人员并不是很友好,还要让界面设计人员去消耗时间成本学习QML语法。Qt Designer Studio软件就是为了解决这个问题而设计的,工作人员不需要…...

elementUI+vue_vue-admin-template框架

目录安装版本管理文件mock文件夹---模拟数据permission.js --- 登录权限控制文件安装 克隆项目git clone https://gitee.com/panjiachen/vue-admin-template.git进入项目目录cd vue-element-admin安装依赖npm install启动服务npm run dev版本管理 由于我们之前的项目是直接从…...

SpringBoot项目使用Schedule注释创建定时任务

文章目录知识讲解相关注释(主要两个,EnableScheduling和Scheduled)scheduled的cron语法代码项目目录结构启动类(Application)定时任务类(Task)配置类(application.properties)pom依赖展望(Quart…...