2016年终总结:从校园到职场的技术反思

回顾2016年从校园到职场的转变历程和技术成长总结

-- 次阅读

2016年终总结:从校园到职场的技术反思

前言

2016年即将结束,回顾这半年多的时间,从9月份入职到现在,我已经在Android开发的岗位上工作了三个多月。从校园走向职场,从理论学习到实践应用,这段时间的成长和变化让我感慨良多。借此年终总结的机会,梳理一下自己的技术成长历程和心得体会。

技术成长回顾

1. 开发环境的适应

校园环境

  • Eclipse + ADT Plugin
  • 手动管理依赖
  • 简单的调试方式
  • 个人独立开发

职场环境

  • Android Studio 2.2
  • Gradle依赖管理
  • 完整的调试工具链
  • 团队协作开发

适应过程: 刚开始使用Android Studio时,很多快捷键和操作方式都与Eclipse不同,特别是Gradle的配置让我困惑了很久。但经过mentor张哥的指导和自己的摸索,现在已经能够熟练使用Android Studio的各种功能。

2. 架构模式的学习

入职前的认知: 在学校里,我们写的Android项目都是直接在Activity中写逻辑,代码结构比较简单。

现在的理解: 通过这几个月的学习,我深刻理解了MVP架构的重要性:

// 之前的做法(不推荐)
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 直接在Activity中写网络请求
        OkHttpClient client = new OkHttpClient();
        // ... 大量业务逻辑
    }
}

// 现在的做法(MVP架构)
public class MainPresenter implements MainContract.Presenter {
    private MainContract.View view;
    private MainModel model;

    @Override
    public void loadData() {
        model.fetchData(new Callback() {
            @Override
            public void onSuccess(Data data) {
                view.showData(data);
            }
        });
    }
}

学习心得

  • 解耦的重要性:MVP让代码更容易维护和测试
  • 职责分离:View负责显示,Model负责数据,Presenter负责逻辑
  • 可测试性:Presenter可以独立测试,不依赖Android环境

3. 网络框架的使用

技术栈演进

  • HttpURLConnectionRetrofit 2.0
  • 从手动解析JSON到Gson自动解析
  • 从同步请求到RxJava异步处理

Retrofit使用示例

public interface ApiService {
    @GET("users/{id}")
    Call<User> getUser(@Path("id") int userId);

    @POST("users")
    @FormUrlEncoded
    Call<User> createUser(
        @Field("name") String name,
        @Field("email") String email
    );
}

// 使用方式
Call<User> call = apiService.getUser(123);
call.enqueue(new Callback<User>() {
    @Override
    public void onResponse(Call<User> call, Response<User> response) {
        if (response.isSuccessful()) {
            // 处理成功响应
        }
    }

    @Override
    public void onFailure(Call<User> call, Throwable t) {
        // 处理网络错误
    }
});

学习体会

  • Retrofit的注解方式让网络请求变得非常简洁
  • OkHttp的拦截器机制很强大,可以做日志、缓存等处理
  • 错误处理比想象中复杂,需要考虑网络超时、服务器错误等各种情况

4. 内存管理的认识

第一次OOM事件的教训: 在11月份,我负责的注册功能出现了严重的内存泄漏问题,导致线上用户大量崩溃。这次事件让我深刻认识到了内存管理的重要性。

学到的知识

  • Handler内存泄漏:匿名内部类持有外部类引用
  • Context泄漏:不当的Context使用会导致Activity无法回收
  • Bitmap处理:大图片需要及时回收,使用适当的压缩策略
  • 工具使用:LeakCanary、MAT等内存分析工具的使用方法

代码改进

// 问题代码
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        // 持有Activity引用,导致内存泄漏
    }
};

// 改进后的代码
private static class SafeHandler extends Handler {
    private WeakReference<MyActivity> mActivity;

    public SafeHandler(MyActivity activity) {
        mActivity = new WeakReference<>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        MyActivity activity = mActivity.get();
        if (activity != null) {
            // 安全的引用
        }
    }
}

工作方法的转变

1. 从"能跑就行"到"质量第一"

学生时代

  • 只要功能实现,能运行就好
  • 代码规范不太重视
  • 测试主要靠手动

职场要求

  • 代码质量直接影响用户体验
  • 需要考虑性能、稳定性、可维护性
  • 自动化测试和代码审查

2. 学习方式的改变

学校学习

  • 理论学习为主
  • 按照教材和课程进度
  • 考试导向

职场学习

  • 实践驱动学习
  • 问题导向,遇到问题才深入学习
  • 需要主动学习新技术

学习方法总结

  1. 实践为主:先用起来,再深入理解
  2. 问题驱动:遇到问题时的解决方案记得最牢
  3. 向同事学习:mentor的指导比看书更有效
  4. 官方文档:遇到问题先看官方文档

3. 团队协作的体会

代码审查

  • 以前写代码都是自己看,现在每行代码都要经过review
  • 别人能发现很多自己忽略的问题
  • 通过review也能学习到别人的优秀实践

版本控制

  • 从简单的git add/commit/push到完整的分支管理
  • 学会了feature branch、merge request等工作流程
  • 理解了提交信息的重要性

技术栈掌握情况

已掌握的技术

技术掌握程度使用场景
Java基础熟练日常开发
Android基础熟练UI、生命周期、四大组件
MVP架构熟练项目架构设计
Retrofit熟练网络请求
OkHttp熟悉网络底层、拦截器
Gson熟练JSON解析
Gradle熟悉依赖管理、构建配置
Git熟练版本控制

需要加强的技术

技术当前水平2017年目标
RxJava了解熟练使用
单元测试不熟悉掌握JUnit、Mockito
性能优化了解深入理解
自定义View不熟悉能够独立开发

2017年技术规划

1. 短期目标(1-3个月)

  • 深入理解RxJava:掌握响应式编程思想
  • 学习单元测试:JUnit、Mockito等测试框架
  • 性能优化实践:启动速度、内存优化等

2. 中期目标(3-6个月)

  • Kotlin学习:Google在IO大会上推荐的语言
  • 架构升级:学习MVVM、Clean Architecture等
  • 组件化开发:了解模块化架构设计

3. 长期目标(6-12个月)

  • 深入理解Android底层:Framework、性能调优
  • 技术分享:在团队内做技术分享
  • 开源贡献:参与开源项目,提升技术影响力

心态变化

1. 从"什么都不会"到"每天都在进步"

刚入职时,面对复杂的项目代码和各种新技术,经常感到焦虑和不安。现在逐渐适应了这种学习节奏,明白了技术成长是一个持续的过程。

2. 从"单打独斗"到"团队协作"

在学校都是独立完成项目,现在明白了团队协作的重要性。代码审查、技术讨论、知识分享都让我的成长速度加快了。

3. 从"完成任务"到"追求卓越"

不再满足于仅仅完成需求,开始思考如何写更好的代码,如何优化性能,如何提升用户体验。

反思与不足

1. 学习深度不够

很多时候只是学会了如何使用某个技术,但对其原理理解不够深入。比如Retrofit的动态代理机制、OkHttp的连接池管理等。

2. 主动性有待提高

很多时候还是被动地等待任务,缺乏主动发现问题和解决问题的意识。

3. 技术广度不足

目前主要专注于Android开发,对后端技术、DevOps等了解较少,技术视野需要拓宽。

感谢与展望

感谢

  • mentor张哥:耐心的指导和帮助
  • 团队同事:良好的技术氛围和知识分享
  • 公司平台:提供了学习和成长的机会

展望

2017年,我希望能够在以下几个方面有所突破:

  1. 技术深度:深入理解Android底层机制
  2. 技术广度:了解前后端协作,成为更全面的开发者
  3. 影响力:不仅自己成长,也能帮助团队其他成员成长

结语

2016年是我职业生涯的起点,虽然还有很多不足,但相比9月份刚入职时已经有了很大的进步。技术这条路很长,需要持续学习和积累。感谢这一年遇到的所有人和事,期待2017年能够继续成长,成为一个更优秀的Android开发者。

2016年技术栈总结

Android SDK 23 (6.0)
Java 8
MVP Architecture
Retrofit 2.0 + OkHttp 3.0 + Gson
LeakCanary 1.5
RxJava 1.0 (初步了解)
Butter Knife 8.0

2017年学习计划

  • RxJava深入学习
  • Kotlin语言学习
  • 性能优化实践
  • 单元测试掌握
  • 架构设计理解
-- 次访问
Powered by Hugo & Stack Theme
使用 Hugo 构建
主题 StackJimmy 设计