一些软件概念上杂乱无章的2
我们经常会遇到一种情况,好入手,难精进。换句话说在抵达瓶颈后,应该如何突破才是最高效的。
这种情况很大程度在于路子不对,看似咫尺,实则天涯。怎么理解呢,就像是有些岗位注定是空降的。看似风马牛不相及,不过确实是正路。
之前有提到我在了解了基本的C++之后,准备重新看看之前看的不是很明白的Python、go、Lua。
我现在看软件的视角,虽然依旧不成熟,不过相对比与最开始解除的时候,只能写一些Hello world,好了不少,应该会有些新的理解。
Python 的使用难度很低,几行简单的代码,就可以将想法实现,反馈性强,修改几行代码后,就可以看到效果。
Python 的问题在于,自学的引导性太差, 很容易陷在函数式编程中出不来,基本上,作为一个实现想法的工具而言是合格的,但是对于更深层次的挖掘,在完成功能的基础上,很难从自己需求的角度去探寻出项目式的结果。
Python 的底层和上层的过度差异性太高,不去将C++磨练到一定程度,Python永远都是在调用api,根本没有写库的能力。
C# 的感觉呢,初学时的门槛要稍微高一些,工程化在拖拽的阶段过渡到代码的阶段也很顺利,实现项目的完成性,相对于Python 阶段有了一个显著性的提高,代码的分离感,层次的构建,各种设计方法和范式的运行,都要比在Python 中规范一些。
C# 的缺陷在于与C++ 的交互方面,当开始涉及到这里的时候,那种割裂的断层感又出现了,过于底层的东西,基本都在别人封装好的库里,而自己对与如何封装出这种优雅的库函数,单纯依靠自己的摸索,很难很难。
于是这里又涉及到了C++,C#写道一定程度,本能的就会朝向C++这边发展。
C++ 非常的繁琐,在有C# 的基础上,面对C++ ,我依旧显得非常无力,很多时候就是有一个大概的想法,但是如何实现想法,自身对于代码和范式的掌握不足以支撑自己实现出来。
C# 的优势在于对C++ 的兼容性上,极其出色,缺陷同样在此,许多原始库就不提供对于C# 的原始支持。
比如OpenCV , 提供了Python,JAVA,C++ 三种编译版本,但是不提供一个C#的版本。
比如CUDA ,比如OpenGL,当然这些都有其他人提供了一个封装好的C# 版本,但到底是不如C++的可扩展性好,面对高级需求时,很乏力。
如果是C++ 出身,转入C#,很自然的对于里面的细节的部分就可以有着一个实现,但是如果只看C#,就很难理解。
虽然C# 提供了unsafe 的写法,但是显得很鸡肋,小的函数没问题,但是具象到工程层面,学习梯度还不如补一补C++。
为了解决这种,C#这块的学习的进阶就只能朝向C++ 。然后来反过来反哺C# 。
当然python 的无力感来的更早一些。
创造某种语言一定是基于某种理由的,如果不是,其他人也肯定会选择不用,正是因为后来的语言,解决了之前语言的某些痛点,所以才让许多人从原来的语言中转向新语言的开发。
语言只是一个接口,调用硬件的接口。
比如CUDA, 用C++创建连接,C# 创建创建连接,JAVA创建连接,Python,在GPU 内部应该效率是一样的。外部效率略有差异。
还有线程之类的。
至于C++学到什么时候算是头,能用其他语言写出来的,用C++ 能够写出来就算是到头。
学习C++就像是修炼内力,而C#,python,Lua,Go,QT,OpenCV,Matlab之类的,则更像是武学或者是武器。
单纯学习C++,对于解决实际问题而言,太过于遥远,而只学习工具的话,瓶颈期会来的很快。就像幼童拿上手枪,也要比成年人拿上棍棒要厉害。