即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

掌握编程, 而不是掌握Java

微信 Java编程 28℃ 0评论

来自:码农翻身(微信号:coderising)

作者:刘欣


由于《我是一个线程》这篇文章的广泛传播, 很多加了我的QQ和微信,交流编程学习的问题。


但是我发现其中很多初学者,尤其是半路出家的遇到了一个很普遍的情况: 那就是只学会了Java 的语法, 而没有学会编程。 


我拿一个例子来说一下, 下面是一个SimpleList 的类, 模仿java 的ArrayList,   已经定义好了接口,需要实现具体的业务:


/**

 * 自定义的一个模仿ArrayList的类, 你需要实现其中的add, get, remove , 等方法

 * @author 刘欣

 */

public class SimpleList{

    private Object[] elementData;

    private int size=0;    

    public int size() {            

        return -1;

    }

    public SimpleList(){        

    }

    public boolean isEmpty() {    

        return false;

    }    

    public boolean add(T e) {

        return false;

    }

    public boolean remove(Object o) {

        return false;

    }

    public T get(int index) {

        return null;

    }

}

然后我拿这个类给几个人测试, 我发现很少人能够顺利的把这几个方法给实现了, 哪怕是非常粗糙的实现也没有。 


感兴趣的同学也可以用你擅长的语言尝试一下。 


这个题目不要求实现复杂的算法, 也不需要进行面向对象的设计,也不需要考虑多线程下的线程安全, 况且已经给了提示:

用一个Object数组来实现。 


如果说有一点语法层面的难度, 那就是使用了一点泛型。 

其实如果我把泛型去掉, 估计他们还是实现不了, 因为这个类的核心逻辑不是泛型。 


这个SimpleList 要求的就是能对一个数组进行操作,核心就两点:

1. 能往数组添加数据, 记录size ,如果数组空间不够了, 需要增大空间

2. 能删除数组指定位置的数据,并且把之后的数据往前挪动。


难吗? 这其实是编程序的基本素养, 编程的本质,和用什么语言实现没有关系。

如果不是Java , 学的是C#, 或者Python,  我估计结果也差不多。


我想可能是不少人都缺乏最最基本的数据结构和算法的训练, 还没有养成面向计算机的逻辑思考的方式。 


解决的办法其实也很简单:就是多实践,多编码, 我推荐多做数据机构和算法的习题, 这也是我个人的经验, 大学时把数据结构的习题都做一遍, 后来工作中只要不是设计算法, 基本上没要难住我的。


如果以后想选择码农作为职业, 这种编程能力是必不可少的, 所以在校的同学, 不妨从现在就开始, 把缺失的能力不上。 

来自:码农翻身(微信号:coderising)


●本文编号307,以后想阅读这篇文章直接输入307即可。

●输入m可以获取到文章目录

相关推荐↓↓↓

 

算法与数据结构

推荐15个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

转载请注明:CodingBlog » 掌握编程, 而不是掌握Java

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情
(11)个小伙伴在吐槽
  1. 大学一年级课程数据结构就要求学生implement各种structure了吧
    Ray.Z2017-02-04 00:53 回复
  2. 谢谢题主的分享,作为半路出家的程序员,确实是面临很多问题,比如不知道提升的方向,不知道目前的技术发展等等,还希望您多多分享,再次感谢
    哈哈哈2017-02-04 01:01 回复
  3. 小主编,我有个建议:你把一排英语写完,然后下面用一排汉字来叙述。对于我这个英语成绩从小20-30分的人来说,想学都学不会- -得一个一个的去翻译英语哇!
    黯然筆中生婕。2017-02-04 01:13 回复
  4. 吹毛求疵一下,文中错别字建议改一下/微笑
    Sky20082017-02-04 01:31 回复
  5. 你以为java很简单吗?请先达到bat等互联网公司的java面试标准再说/呲牙/呲牙
    走X开月月鸟(1)2017-02-04 03:29 回复
  6. 楼主请给我学好编程的建议/撇嘴
    松果2017-02-04 05:05 回复
  7. 我想问这么底层的实现有必要拿出来说?你会写也不代表会编程,你花几天修改出的自以为牛逼的实现有guava写的好(顺便你知道guava吗)?别人不会写也不代表不会软件开发,一直在倡导不要重复造轮子,越是无能的程序员越是纠结这种底层实现,你干嘛不去写linux,我建议作者好好学习优秀技术的思想,从广义上去学习编程,多参与参与开源社区的讨论,在巨人的肩膀上开发。以上
    X2017-02-04 05:27 回复
  8. 面向对象有guava包,线程安全有concurrent包,不明白要自己写实现干什么,作者真的会编程?根据需求合理选择解决方案才是程序员要做的,不是会默写几个算法实现就是牛逼程序员,默写不出来也不代表不理解,默写得出来也不代表你会解决多少实际问题,要学习编程得同学多看官方文档多跑demo就好了
    X2017-02-04 09:26 回复
  9. 怎么感觉这人是非计算机职业人员
    浊玉2017-02-04 11:22 回复
  10. 默默把arraylist反编译 同沙发板凳地板说的话
    Java_command2017-02-04 16:55 回复
  11. 感谢这个公共账号,因为他愿意分享。关注这个账号的有大牛也有初学者,有大牛看了以后不屑,有初学者看了学到了知识。我真心希望作者能开心的坚持下去,无论怎样我都支持你!
    This.侠客行2017-02-04 18:38 回复