日期:2014-05-20  浏览次数:20731 次

我想对计算机系的学生说……
在计算机的世界里,绝大多数情况下,学好C++,走遍天下都不怕。

但是搞C/C++你一定要搞好才行!还有,在学校的时候把每门功课都学扎实了,包括英语,包括数学!包括各种专业基础课!!!哥是过来人,不听哥的话可能你毕业后照样能找到工作,但十年后你就明白哥说的对了。

PHP、Python、.Net、Java神马的都是浮云。。。虽说哥也是个.Net程序员。
我不是贬低.Net,但对于计算机系的学生来说,你最应该花费精力的地方,是C/C++、数据结构与算法、操作系统、编译原理

别的都没这个重要。

学好C++,再去搞别的,so easy!
但是只会别的不会C++,再想往深一点发展。。。too hard!!!

这些东西我都没在大学里学过,但我在我十年的职业生涯中体会到了它们的重要。
你们现在有机会在课堂里学,多幸福呀,还有老师教。我可是羡慕死你们了。

别过早追求花里胡哨的东西,别过早急功近利。


话说,虽说哥现在是个.Net程序员,但是哥在做第一份.Net工作之前是个C++程序员。公司招俺去,扔给俺一本书:《C#高级编程》,自己看。然后4天后,哥就正式做项目了。

4天!!!对C++程序员来讲,4天从C++转到C#足够了。

但是我可没听说过,有人之前不懂C++,只懂C#,从C#转到C++只用了4天。


归根结底一句话,听哥的没错。哥十年的程序员经历不是白混的。


言语可能偏激,但话糙理不糙。
欢迎拍砖,拍得在理哥给分。

PS:哥当年不是学计算机的,是三流大学非热门专业的小本科,计算机全自学的。


------解决方案--------------------
每个人都有自己的路,没必要把你的路强加到别人头上吧?哥不懂C++也不懂数据结构,跟你一样,也不是计算机科班出生的,主业学的化学。如今照样做项目,还懂计算机网络,做过多媒体。如果大家都靠Coding吃饭的话,我想大家都是打工仔,能优秀地完成老板交给的任务即可。即便要做更高层次的软件架构师,系统分析师,也并不见得必须要C++吧?Java和C#都源自于C++,也抛弃了C++里一些繁琐不常用的功能,使得程序设计显得更加简洁和易用,这就够了,为什么还要舍简求繁呢?按照你的推理,那是不是还要去劝大家再去学汇编?当然,数据结构还是需要学的,并且我也不是说你说错了,只是认为没必要让所有的人都按照同一条路去走。再说现在即便有什么问题,google一下很快也出答案。我不知道在哪儿听说过,说现在是搜索的年代而不是以前记忆的年代,我想或多或少地还是有些道理的。
------解决方案--------------------
最开始开发用的是xenix系统+foxbase
后来转windows平台,
学习vfp,2天,就开始写项目了,
再后来,学习vb,1周,开始写项目
C#根本不用学,同事给我讲了2小时代码,就上手干了,第一件事情就是开发了自己的异常处理框架

------解决方案--------------------
是的,虽然我不是计算机系的,但是我本科较C#为熟悉,现在读研了,研究生期间果断开始C++,本科有点底子,确实,C#太浮云了,JAVA咱不说,好歹有跨平台嘛。
------解决方案--------------------
楼主的话其实说对了,

“编程语言不重要,重要的是思想…”

这句话我也不太赞同,因为我是个极端的程序员,自写了一个访问数据库的对象,将数据都存储在内存中,然后去读,效率低,比C++低太多了。虽然写法和C++没什么区别。

我有些习惯于代码说话,你瞧楼下的这代码,GetNumberBytes已经达到算法的极限了。
GetBytesNumber还可以优化,反过来计算,不使用Math.Pow。


最后使用了BitConverter,很难理解为什么BitConverter的效率更高。除非他们不是.Net写的。


C# code

    public static Byte[] GetNumberBytes(Int32 dValue) {
        Byte[] aBytes = new Byte[4];
        Byte aPlace = 3;
        while (dValue > 0) {
            Int32 aWidth = dValue / 256;
            Int32 aHouse = dValue - aWidth * 256;
            aBytes[aPlace--] = (Byte)aHouse;
            dValue = aWidth;
        }
        return aBytes;
    }
    public static Int32 GetBytesNumber(Byte[] dValue) {
        Int32 aInt = 0;
        for (Int32 i = 0, aLength = dValue.Length; i < aLength; i++) {
            aInt += (Int32)(dValue[i] * Math.Pow(256, dValue.Length - i - 1));
        }
        return aInt;
    }

------解决方案--------------------
我觉得理解了c# 继承多态 面向对象 网络编程 和算法 数据结构这些东西,转向c++也是挺容易的

c++看起来也就是多可 : :: -> 这些符号,只不过是语法有点不同,方法原理基本都是一样的

c++那些指针 stl的语法等对初学者比较难把握,很难读懂,这也是很多人望而却步的原因。

相比c# java的语法就优雅很多了。很容易读懂。


------解决方案--------------------
学了几年C++之后,被C++各种复杂的容易犯错的特性调戏了N多次之后,勉强可以上手做点东西。所以现在看C#也有点和大学期间不同,感觉C#语法很优雅,并没有什么不好。如果快速做出一些东西来,.net C#比C++的优势大多了。
C++的优势在于强大,几乎没有用C++实现不了的。但是其复杂性也绝不是吹得。刚刚学习C++的时候,被各种临时对象,各种深拷贝浅层拷贝,各种指针常量,常量指针,各种模板,搞得一头雾水,并且到现在也还是感觉没学到方方面面感觉很透彻,就这样混混沌沌的用着。
初学者往往会觉得C++太难,这是因为C++里面东西太多,导致初学者犯错的机会更多。但入门之后就感觉好一点。
C#入门容易,但后续要学习的东西也很多。我现在看C#,也有一种很陌生的感觉,毕竟大学期间学了好长一段时间。C#是一门高速发展中的语言,我最早学的是FrameWork1.1,现在都4.0了吧?
但是相对的,C++的发展就没有那么快,相对稳定。