很多初學(xué)者,尤其是半路出家的遇到了一個(gè)很普遍的情況: 那就是只學(xué)會(huì)了Java 的語法, 而沒有學(xué)會(huì)編程。 我拿一個(gè)例子來說一下, 下面是一個(gè)SimpleList 的類, 模仿java 的ArrayList, 已經(jīng)定義好了接口,需要實(shí)現(xiàn)具體的業(yè)務(wù): /** * 自定義的一個(gè)模仿ArrayList的類, 你需要實(shí)現(xiàn)其中的add, get, remove , 等方法 * @author 劉欣 */ public class SimpleList<T>{ 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; } } 然后我拿這個(gè)類給幾個(gè)人測(cè)試, 我發(fā)現(xiàn)很少人能夠順利的把這幾個(gè)方法給實(shí)現(xiàn)了, 哪怕是非常粗糙的實(shí)現(xiàn)也沒有。 感興趣的同學(xué)也可以用你擅長的語言嘗試一下。 這個(gè)題目不要求實(shí)現(xiàn)復(fù)雜的算法, 也不需要進(jìn)行面向?qū)ο蟮脑O(shè)計(jì),也不需要考慮多線程下的線程安全, 況且已經(jīng)給了提示: 用一個(gè)Object數(shù)組來實(shí)現(xiàn)。 如果說有一點(diǎn)語法層面的難度, 那就是使用了一點(diǎn)泛型。 其實(shí)如果我把泛型去掉, 估計(jì)他們還是實(shí)現(xiàn)不了, 因?yàn)檫@個(gè)類的核心邏輯不是泛型。 這個(gè)SimpleList 要求的就是能對(duì)一個(gè)數(shù)組進(jìn)行操作,核心就兩點(diǎn): 1. 能往數(shù)組添加數(shù)據(jù), 記錄size ,如果數(shù)組空間不夠了, 需要增大空間 2. 能刪除數(shù)組指定位置的數(shù)據(jù),并且把之后的數(shù)據(jù)往前挪動(dòng)。 難嗎? 這其實(shí)是編程序的基本素養(yǎng), 編程的本質(zhì),和用什么語言實(shí)現(xiàn)沒有關(guān)系。 如果不是Java , 學(xué)的是C#, 或者Python, 我估計(jì)結(jié)果也差不多。 我想可能是不少人都缺乏最最基本的數(shù)據(jù)結(jié)構(gòu)和算法的訓(xùn)練, 還沒有養(yǎng)成面向計(jì)算機(jī)的邏輯思考的方式。 解決的辦法其實(shí)也很簡單:就是多實(shí)踐,多編碼, 我推薦多做數(shù)據(jù)機(jī)構(gòu)和算法的習(xí)題, 這也是我個(gè)人的經(jīng)驗(yàn), 大學(xué)時(shí)把數(shù)據(jù)結(jié)構(gòu)的習(xí)題都做一遍, 后來工作中只要不是設(shè)計(jì)算法, 基本上沒要難住我的。 如果以后想選擇碼農(nóng)作為職業(yè), 這種編程能力是必不可少的, 所以在校的同學(xué), 不妨從現(xiàn)在就開始, 把缺失的能力不上。
|
|