V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vvniu
V2EX  ›  程序员

我知道我的代码水平有问题。。。。

  •  
  •   vvniu · 2013-12-24 14:09:05 +08:00 · 6562 次点击
    这是一个创建于 3989 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以上两个是今早我写的一个c++一次小小小小的作业。。。就是用c++写一个电话本,要求可以插入删除搜索写入文件,最开始从文件读取

    之前的版本(http://pan.baidu.com/s/1pJ8Ux55)各种bug。。。。。
    被大神a喷过之后,大神b帮我指出了telBook.cpp 里 addTel函数和getFromFile函数里的问题,分别改了tmp = new telNode; tmp = new telNode; 和 !fin.good()这三个地方(对比下就课看出),然后我又想起了大神a的教诲把代码重新修正了一下就成了现在的版本(http://pan.baidu.com/s/1kTnxPjx)。。。。。

    代码据说不堪入目。。。。。被建议重头学起。。。。

    然后。。。希望能帮我看代码的人。。。说说我这种情况怎么个重头学起法(就是毛病出在哪。。)
    44 条回复    1970-01-01 08:00:00 +08:00
    luoyou1014
        1
    luoyou1014  
       2013-12-24 14:15:23 +08:00
    如果不打算依靠C++谋生而仅为了过考试的话, 貌似没有必要重学, 如果打算依靠C++谋生的话, 有一篇文章叫2012年不宜进入的三个技术点
    mimiwu
        2
    mimiwu  
       2013-12-24 14:27:34 +08:00
    @luoyou1014 感谢
    66beta
        3
    66beta  
       2013-12-24 14:37:57 +08:00   ❤️ 2
    楼主不必惊慌,这是定律,每三个月回头看一次自己写的代码,都是不堪入目的
    mingzhi
        4
    mingzhi  
       2013-12-24 14:46:59 +08:00
    给楼主一个建议 先把代码放到github 上
    放在百度云 先看还要下下来 好麻烦呀
    Golevka
        5
    Golevka  
       2013-12-24 14:49:54 +08:00
    为什么不问问神奇海螺呢
    felix021
        6
    felix021  
       2013-12-24 14:52:08 +08:00   ❤️ 1
    基础不扎实,重头学起就是老老实实把书上之前的代码和习题都写一遍,就像这样的:

    http://acm.whu.edu.cn/starter/problem/list?volume=1
    66450146
        7
    66450146  
       2013-12-24 15:07:02 +08:00
    每次我看昨天写的代码,都有一种删掉重来的冲动

    唔,还真这么干过。。
    Narcissu5
        8
    Narcissu5  
       2013-12-24 15:46:01 +08:00
    @luoyou1014 搜了下这文章,吓死我的。ActionScript和C++程序员工作两三年我没见过月薪在五位数以下的。中间那个线程更是让人不知所云。
    tox
        9
    tox  
       2013-12-24 16:38:39 +08:00
    语言只是工具而已,你这情况和c++没关系,以后多写写代码,慢慢的思维逻辑就会清晰起来。
    vvniu
        10
    vvniu  
    OP
       2013-12-24 18:27:18 +08:00
    @felix021 @tox 好像也只能这样了,但是我更多想问问怎么(非实践)学习的

    @luoyou1014 看不懂。。。。
    MuyouSome
        11
    MuyouSome  
       2013-12-24 19:42:32 +08:00
    @Narcissu5 不宜“进入”,其实是对那些想要快速找到工作的人说的。。。
    refresh
        12
    refresh  
       2013-12-24 19:46:16 +08:00
    @66450146 这是为什么呢,我也是同样啊,几乎每次看到上一个项目,都觉得很渣,是因为水平上上升了?
    slixurd
        13
    slixurd  
       2013-12-24 19:46:17 +08:00
    简单看了一下代码,给几条建议先
    1.main里面,cout<<"..."<endl<<".."<<endl;其实完全可以写成cout<<"..\n.."<<endl;
    endl是用来清空缓冲区顺带换行的= =,只是换行\n就行了..
    2.可以用构造函数处理的就用构造函数处理,没必要创建了实例然后一个一个set,这样你和面向过程编程有什么区别,只是全在一个作用域里而已
    3.不实现的函数就别写了,析构函数你写来干嘛?又不用
    4.打包代码请打包代码, .o,.exe,还有makefile.win都放进来一点用都没有
    5.这么小型的项目复用意义不大,只要能提取出公共函数的提出来做私有成员函数,然后引用就好了...
    vvniu
        14
    vvniu  
    OP
       2013-12-24 20:13:54 +08:00
    @slixurd 感谢您的建议,然后就想问问像这种比较细的点只能在coding时一点点积累吗?有没有什么系统的学习方法或资料?
    mozutaba
        15
    mozutaba  
       2013-12-24 20:22:30 +08:00
    这种东西写一个文件就好了嘛,放几个文件里怎么交报告给老师看哦。
    ferson
        16
    ferson  
       2013-12-24 20:28:58 +08:00
    如果用了std::list就好点吧……我猜
    wb14123
        17
    wb14123  
       2013-12-24 20:29:04 +08:00
    放github上吧
    vvniu
        18
    vvniu  
    OP
       2013-12-24 21:45:23 +08:00
    @mozutaba
    @ferson
    @wb14123
    不不不。。。这只是举个栗子。。。。主要是想问下如何提高的
    tonitech
        19
    tonitech  
       2013-12-24 21:57:44 +08:00
    放开源中国代码托管吧!这样国内访问速度快一点。
    wb14123
        20
    wb14123  
       2013-12-24 22:31:00 +08:00
    主要是放百度网盘上大家看起来不方便
    cassyfar
        21
    cassyfar  
       2013-12-24 22:40:34 +08:00
    我在想这么OOD写是LZ设计的还是老师要求的

    @slixurd 提出的都是常识吧 只要能理解对应的知识点之后就应该知道 LZ确实再重头自学下比较扎实
    Golevka
        22
    Golevka  
       2013-12-24 23:55:35 +08:00
    刚刚看了下代码,感觉最大的问题是UI和处理逻辑被混杂在一起,并且UI相关的部分散落在main和class telBook的各个角落。似乎作者没有考虑清楚类里面应该做什么/不应该做什么。
    vvniu
        23
    vvniu  
    OP
       2013-12-25 00:14:45 +08:00
    @cassyfar 主要就是写的程序别人老说我太面向对象了(之前学的c),然后就刻意这样写的,但是有老觉得框架搭不好。。。。正如 @Golevka 所言

    @Golevka 那怎么个分法比较好呢?再单独写一个ui的头文件?
    ferson
        24
    ferson  
       2013-12-25 00:53:25 +08:00
    我就说嘛,为什么不用std::list或写一个List<>,还用C那样手动写链表,原来楼主用C的方法写C++
    cassyfar
        25
    cassyfar  
       2013-12-25 03:09:39 +08:00 via iPhone
    @vvniu 你应该指的是之前用的面向过程吧 这两种都只是个编程思路 要看实际问题才能确定到底用哪个 不能说为了面向对象而面向对象 你这个程序就是没有必要用到 要keep it simple stupid
    建议LZ找本书熟读下吧 另外我觉得cpp很多语法糖 初学用C 练练数据结构什么也挺好的
    qiukun
        26
    qiukun  
       2013-12-25 08:17:53 +08:00
    还没人说读代码呢。。
    felix021
        27
    felix021  
       2013-12-25 08:57:57 +08:00 via Android
    @vvniu 如果不想实践的话就趁早改行为妙。
    Hyperion
        28
    Hyperion  
       2013-12-25 08:59:06 +08:00
    挺好的... 大多数学校教C++程序设计的方法, 基本都是惨不忍睹的... 管你用C还是用C++, 跑的起来+够炫, 就是高分... 起码思想都在了. 买本C++ Primer最新版的看看, 然后找点开源看看应该怎么写, 基本就差不多了.

    如果不打算靠这玩意吃饭, 还是不要踏进这个门槛了. C能搞定就非常赞了...

    自爆黑历史, 请勿吐槽, 我自己都看不下去. 各种风格混杂的写法, 这才是真的惨不忍睹.(其实看起来更像原始向的javascript) 主题是几个里面选其一, 原本还想补个GUI, 但想想太浪费...
    http://share.weiyun.com/d517050cbd46cc677d796de745fe6ca2
    felix021
        29
    felix021  
       2013-12-25 08:59:35 +08:00 via Android
    @ferson 对于初学者来说 自己写一个比用stl要有益的多。
    suckli
        30
    suckli  
       2013-12-25 09:08:33 +08:00
    建议楼主把代码放到github上
    同时也很敬佩楼主,敢于把自己的代码发出来让大家挑毛病
    这需要很大的勇气
    sxd
        31
    sxd  
       2013-12-25 09:16:07 +08:00
    @Narcissu5 你在哪 我过来让你看一下我
    suckli
        32
    suckli  
       2013-12-25 09:17:12 +08:00
    提几点风格上的建议
    1、代码里混用了空格和tab,这样十分不好
    2、不需要的代码就删掉,不要注释了就放在那里不删
    3、if后面即使只有一行,最好也带括号括起来
    4、return后面竟然还有语句......
    5、new 失败了是会抛异常的,判断非空是没用的;另外,即使失败了也不应该直接调用exit~
    luoyou1014
        33
    luoyou1014  
       2013-12-25 09:38:06 +08:00
    @Narcissu5
    @vvniu

    那篇文章里面解释了, 说不宜进入的技术点不是说这些技术点薪水不高, 而是投入与产出比低, 例如as, 从adobe放弃移动端的flash转而支持HTML5, 说明as会越来越没落, 不过因为做as的人少, 所以as人的薪水也会更高, 但是也要堤防公司换技术方案. C++同理, 至于线程, 是说多线程有了更好的替代方案, 以后线程的应用可能会越来越少
    Golevka
        34
    Golevka  
       2013-12-25 10:36:51 +08:00   ❤️ 1
    @vvniu 举个简单的例子, 比如说add时的prompt是在main里面做的, 而delete的prompt却又做在telBook里面了. 一般地, 像prompt, 控制台输出之类的东西最好放在telBook外面, 否则你若是想在别的地方用telBook, 却发现自己被里面捆绑的UI逻辑给绑架了那就不好了.

    大方向就是这样, 细节上的问题就更多了(还有一个非常严重的非风格问题: new和free配对的问题居然没人吐槽...). 另外楼主似乎不知道如何写链表, 其实在一开始就分配一个头结点以后能省去好多事情.
    slixurd
        35
    slixurd  
       2013-12-25 11:15:44 +08:00   ❤️ 2
    其实= =,这是大一的C++大作业啊,和我们的大作业题目也一模一样
    那些说用STL的为什么不想想这种入门级作业怎么能用STL写,这就是为了练手,熟悉语言,熟悉基本数据结构才开的大作业,否则这种东西为什么不用数据库?数据库写这个难道不是天经地义的东西么

    而且感觉略多人都站在了很高的角度上,这种程序真不需要MVC分离,也不太需要一个优秀的设计模式,总不会这样一个小程序还用FACADE指派任务或者拿个简单工厂来转移任务降低耦合么?

    这种代码就应该好好用基本的CLASS/STRUCT慢慢写,想要写的好的话可以考虑如何在这样一个简单的东西里做出一个不那么简单的东西,例如:
    1.随机存储,你现在的顺序读取无法随机存储,那么当你有一百万条记录的时候你还这样一条一条读?不怕内存爆掉?
    2.通讯录分组,为什么不加字段做通讯录分组?即使不考虑那么大规模,你一样可以顺序读取,然后建立一颗根据分组来做分支的树加快查找速度(速度是可以用数据看到的
    3.通讯录更多的信息,你这个通讯录就那么几个字段,可以考虑更多的字段,更复杂的逻辑
    4.导出符合规格的VCR文件,或者参考VCR格式来修正

    想写的好就多写多看,买本C++ Primer,看看别人的源代码...千万不要有人说产出比低就不看了,能做的多好就做的多好,不然以后你会后悔的...
    Narcissu5
        36
    Narcissu5  
       2013-12-25 12:37:56 +08:00
    @luoyou1014 这说法放C++身上成立,放AS身上就不成立!实际上由于我大天朝奇葩的页游产业和居高不下的低版本IE使用率,flash很可能在很长一段时间内压制html5。现在的AS基本上是供方市场,产出投入比极高。
    ferson
        37
    ferson  
       2013-12-25 12:44:17 +08:00
    当年我也做电话本这种入门作业,一开始我也跟楼主一样写得比较杂乱,不管是用STL还是自己实现所有的东西,或是用更高级的数据库什么的,以及怎么把class设计得好,再到用什么什么模式,我个人是一步一步地全都尝试过,就当是学习。
    所以这种入门级的作业,如果说为了完成作业的话那功能完善没有bug就ok了,而如果你想要做得更好的话,一个小小的电话本就可以越写越有意思——然后程序就会越来越臃肿,然后就考虑到重构,然后就学会了如何精简程序,这样一步一步走来。
    可能每个人的步骤不一样,关注的细节也不一样,但相同的是,要有探索和尝试的想法,然后总结经验。
    当然,几本大部头的书还是要看的
    Hyperion
        38
    Hyperion  
       2013-12-25 12:51:15 +08:00
    @slixurd 用什么完全不是重点, 重点是思想. 基础的STL看看也就会用了, 使用上完全不是什么障碍, 应该用, 这玩意我觉得才是C++的基础啊. 和C重叠的部分, 重复折腾一点意思都没有.
    luoyou1014
        39
    luoyou1014  
       2013-12-25 14:46:07 +08:00
    @Narcissu5
    所以这两年as已经到顶峰了, 也无法发展, 剩下的就是衰落, 尤其是ie6已经降到了10%的情况下, 精通一门技术至少两年的时候, 两年的时候足够as衰落了
    bombless
        40
    bombless  
       2013-12-25 15:15:16 +08:00
    楼主,你现在就在提高啊……不用惊慌,多读多写就好
    hourui
        41
    hourui  
       2013-12-25 19:22:37 +08:00
    隔几天回看自己的代码发现是一坨屎,然后推翻重写;隔几天回看自己的代码发现是一坨屎,然后推翻重写;...循环往复,LZ你就可以成为高手了
    vvniu
        42
    vvniu  
    OP
       2013-12-25 21:18:35 +08:00
    @Golevka 确实这个ui的逻辑我想了半天,你这么一说就清楚了,谢谢~O(∩_∩)O
    @slixurd 思想让人眼前一亮,十分感谢,以后我会多考虑这样的问题的
    dimpurr
        43
    dimpurr  
       2013-12-26 11:02:10 +08:00 via Android
    GitHub 最好还是扔开源项目或者可复用的 Gist
    分享代码推荐用个 Paste Bin:
    http://paste.chakra-project.org/
    regmach
        44
    regmach  
       2013-12-26 23:23:50 +08:00
    @Golevka 神奇海螺赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:17 · PVG 07:17 · LAX 15:17 · JFK 18:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.