前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >回顾 <程序员练级攻略>

回顾 <程序员练级攻略>

作者头像
包子面试培训
发布2018-04-20 16:55:04
1.3K0
发布2018-04-20 16:55:04
举报
文章被收录于专栏:包子铺里聊IT包子铺里聊IT

大约四五年前,小编偶然在网上看到这篇 <程序员练级攻略> (首发于酷壳网), 文笔流畅,内容实在,十分受用。到今天,技术届的发展天翻地覆,再来回顾这篇“大文”,别有一番感慨。

观点一:用户界面

你也许会很奇怪为什么下面的东西很偏 Unix/Linux,这是因为我觉得 Windows 下的编程可能会在未来很没有前途,原因如下:

  • 现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备 iOS 或 Android. Windows 的图形界面不吃香了。
  • 越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows 的成本太高了。
  • 微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows 编程革命史》

现在看来,Web 和移动的确已经形成统治。

Web 目前的用户体验几乎可以媲美 OS 客户端程序,加上 Web 的快速迭代性,优势明显。当下,传统的 Windows/Mac 下客户端程序几乎不在主流市场,当然 Windows Office 套件、外包项目或者某些游戏产品依然可以活的不错,但当年繁荣的生态圈肯定是不存在了。

移动则是目前、甚至未来很多年的新贵。移动端开发的崛起很大程度是由于资本市场对于移动产品的青睐,所以无论用户体验如何,技术成熟度如何,移动端的产品是必须要上线的。

对于对微软的吐槽,只能说现在的时代已经不需要围绕 Windows 的生态圈发展,一代新人换旧人。

观点二:启蒙入门的几点建议

  • 学习一门脚本语言,例如 Python/Ruby
  • 用熟一种程序员的编辑器(不是 IDE ) 和一些基本工具
  • 熟悉 Unix/Linux Shell 和常见的命令行
  • 学习 Web 基础(HTML/CSS/JS) + 服务器端技术 (LAMP)

以现在的观点,这些建议仍不过时。无论是脚本语言、Shell CLI、Editor,这些的确是工作中趁手的家伙,越早掌握越好。学这些知识,可能在找工作的时候不会有巨大帮助,但当你离开刷题的环境,真正需要做点什么,有足够的边边角角的积累非常重要。

对于 Web, HTML/CSS/JS 依然是基础,但是前段框架的快速迭代已经让它们变成相对 “底层“ 的部分;此外 LAMP 略有过气,无论是 Linux, Apache, Mysql, 在云计算的环境中都有非常好的产品,如果想实践的话,完全可以在 EC2 搭上一个 web server, 跑上 Mysql 甚至 RDS.

观点三:进阶加深的几点建议

  • C 语言和操作系统调用
  • 学习 Java
  • Web的安全与架构
  • 学习关系型数据库
  • 一些开发工具 (版本管理、单元测试之类)

C 语言和系统调用的部分,是值得懂得知识。系统上层框架设计的再好,依然是对于各种系统调用的封装和实现,一旦出现底层的问题需要调试,如果 Google / StackOverflow 上再找不到答案,小伙伴们还是得老老实实回来补这一部分知识。

安全与相关的架构现在越来越成为一个单独领域的知识,无论是 SQL 注入,JS 注入,XSS 攻击,还是什么花式翻新的攻击方式,一个全职的程序员想做到精通还是非常困难的,现今更流行的方式还是让专门的安全技术团队来处理这个领域的问题。

关系型数据库是一个非常基础的知识,尤其是 dev ops 和 full-stack engineer 这种概念的流行,普通程序员顺便做点 data analyst 的任务也是非常正常的,不会 SQL? 别闹了。

观点四:高级深入的几点建议:

  • C++ / Java 和面向对象
  • 加强系统了解
  • 系统架构

原文在面向对象、系统了解、系统架构这些方面做了很详细的论述。比如面向对象方面,内存布局,设计模式,设计 Web service 等;系统了解方面谈到的各种 IO 模型,理解什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)等,各种 IPC 进程序通信的方法,TCP 等网络协议的细节等;系统结构就更多,不一一展开。

现在这些知识仍然是基石般的存在。尤其是 OS、网络、分布式的原理和实现,可以说,是随着时间、随着技术日趋复杂的环境,越来越重要的。当下的各种高大上的技术,真的突破了原来 OS 的限制么?很难说。

但不能否认的是,目前流行的 Web、移动端产品,用户量、数据量都是前所未有的,应对这些新的变化需要更高性能、更灵活的框架,也要求更细致的分工。并不是所有从业者都需要在 Stack 这么低的位置去理解所有来龙去脉,但如果你想成为一个卓越的程序员,或者所谓的 full-stack engineer, 依然建议深入学习,深入实践。

尾声

自己刚入行的时候,朝九晚五,写写程序看看书,貌似尽在掌握,其实心中对未来的职业发展、个人发展是很迷茫的。对于技术,或者说技术掌握到什么阶段就够了,听同行们谈,自己也想,但总感到差点意思,不得要领。

最初看到 <程序员练级攻略>,读者回复中也是五花八门,有说这么多东西学到死也学不完的,有说程序员干不到30岁早点转管理才是王道的,有说看完了热血沸腾好好学习的,有说按这个来只能生产一些每方面都会点的垃圾程序员的,还有说要是两年前看到这篇文章就好了的…

回头再来看它,没当初那么激动,甚至觉得有那么一点点过时(都什么时代了,攻略里面连刷题 / Leetcode 都没提),很多阐述也有主观的地方,但这些并不妨碍它在那个日子,给一个还没那么入门的读者,一个看起来很大的世界。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 包子铺里聊IT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 观点一:用户界面
  • 观点二:启蒙入门的几点建议
  • 观点三:进阶加深的几点建议
  • 观点四:高级深入的几点建议:
  • 尾声
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档