程序员从这里开始

转眼间,自己已经从事软件开发工作7年有余,现在想想,仿佛还在昨天。2008年初,怀着一颗忐忑不安的心来到了首都北京,由于公司项目需要以及结合自身的特长和兴趣光荣地成为了一名菜鸟级C/C++软件开发工程师(其实直到现在我依然将自己定位为一名 菜鸟级C/C++软件开发工程师,因为软件开发是一条不归路, C/C++领域更是永无止尽)。

在这7年中,我加入过国企、美企、韩企;自学过C/C++、Python、Nodejs、Swift、JS/Html/CSS、PHP开发语言;尝试过Unix、Linux、VxWorks、Android、IOS、Tizen操作系统;开发过服务器端程序、PC端桌面应用程序、移动设备端应用程序;涉猎过遥感、嵌入式、导航、智能电视领域;经历了从传统互联网到移动互联网的改革,目前正处在物联网的洪流中,怀着一切皆可连的信念,致力于用互联网思维改造传统行业的事业。

大家可能会感觉能涉及这么多知识应该是一件很幸运的事情,会让人感觉很充实,很满足,很自信。没错,当时这对于我来说确实感觉很幸运,能有此经历,让我开了眼界、长了见识,每天的生活过的很充实,很满足,但是我并不自信,就像刚才说的,我感觉自己依然是一名菜鸟。瞬息万变的科技环境,层出不穷的新技术,让我不敢停止,不敢回头,仿佛永远跟不上时代的发展,科技的进步,逐渐地迷失了方向,不敢停止前进的脚步,心身俱疲的我有种牛入泥潭的无助感。

现在回头看看,过去的我其实完全没有必要将自己放逐在飞速发展的技术洪流中,由于害怕自己跟不上知识的更新与发展,盲目地追求当下最前沿科技,反而让自己失去了方向,失去了焦点。每个人的精力和时间都是有限的,所以我们要将自己的优势和自己感兴趣的领域结合在一起,并专注的在这一领域中做到极致。现在回想起来,造成自我迷茫和混乱的原因主要是因为当时刚刚大学毕业的我,对整个软件开发领域没有整体、系统的认识,不了解软件开发的实质和真谛,没有从本质上把握该领域的发展,所以当时的自己只能用永不停止的步伐保持与该领域的同步,从中获取一丝安慰和仅存的那一点点安全感。但是,这种没有目标的前进和追赶在一定程度上并不能让自己的价值最大化。

我有时在想,如果当时我的身边能有一位好的前辈,好的导师及时地给予我一些指导和帮助,我就能少走很多弯路。所以,我想把自己积累的知识、吃过的教训、犯过的错误以及对行业的理解分享给对软件开发感兴趣的大学生。授人以鱼不如授人以渔,在这里,我的最终目标是不仅帮助大家学习一门开发语言或者某项技术,更重要的是帮助大家尽早地从整体上把握该领域的本质,对软件开发的整个产业链有一定的了解,从而让大家能以最快的速度定位自己的角色,发现最适合自己的工作职位,用正确的思维去思考自己的职业生涯,从而知道自己想要什么,只有自己明确知道自己想要什么,你的努力才是有价值的,才不会在浮躁的城市中迷失自己。

为了帮助大家从整体上对软件开发有一定程度的了解,下面简单介绍下移动互联网产品开发流程,如下图所示:

这里写图片描述
概念化阶段:该阶段主要用于评估产品机会。比如,定义产品价值即产品解决用户的哪个痛点;定义目标群体即产品针对哪类人群;判断市场时机即此刻推出此产品是否迎合了当下市场环境。微软2001年推出了平板电脑,诺基亚2005年也推出了平板电脑,两个巨头都率先进入了平板电脑领域,但均以失败告终。苹果公司2010年才推出ipad,但最终成功了。为什么后来者反而率先打开了平板电脑市场,我想除了ipad本身的优势以外,市场时机也是重要因素之一,当苹果推出ipad时,所需的软硬件技术已经成熟并且无线网络已经逐渐普及,这些都为ipad的成功打下了良好的基础。
产品化阶段:该阶段主要用于定义待开发的产品。比如,收集、管理用户需求、制定需求优先级,从而定义功能列表,并开发高保真度原型,邀请用户参与原型测试,验证产品创意、可行性以及商业模式。
技术化阶段:该阶段主要进行产品的研发,可以狭义地理解为编码阶段。
商品化阶段:该阶段主要工作包括,运营部门确定推广策略、销售部门确定促销策略。
市场化阶段:该阶段主要收集用户反馈,并利用收集来的用户数据分析产品状态,根据产品的实际应用情况,不断地提升产品的各项指标,逐步完善产品。

看到这里大家或多或少会有种不知所措的感觉,面对如此复杂的流程和诸多不同的领域,作为即将步入职场的大学生,我们应该如何选择一个切入点?技术化阶段是我选择的切入点。此阶段的主角是软件开发工程师,俗称“程序猿”,我们可能需要3年左右的时候通过参与大量的项目或者开发自己的产品的方式学习一门主流开发语言,如果想对一门开发语言达到精通的程度,可能需要的时间更长。以我自身来说,我目前依然在继续C++语言的学习,越是深入学习,越是感觉自己无知。如果大家哪天感觉自己已经完全精通了C++语言,说明自己可能在技术方面遇到了瓶颈,这时候,我们应该阅读更多、更深入的书籍或者选择一个更有挑战性的项目提高自己,只有不断地提高自己,才能让自己不断地增值。现在世面上有很多主流开发语言,我们到底应该如何选择一门开发语言进行学习?在这里,我给大家的意见是,选择C/C++作为自己主要的开发语言,等自己已经入门之后,可以再选择Java、javascript、python、Go等其他高级语言作为辅助开发语言。技术在不断的发展更新,所以,我们要不断地充实自己,提高自己,集多种开发语言优势与一身,只有了解多种语言的优势和局限性,才能在日常开发工作中做到游刃有余,更好的驾驭整个项目。在初期积累知识和经验阶段,大家不用操之过急,担心自己落伍,我们只要在正确的方向上循序渐进地前进就可以了,按照自己的节奏,一步步走,贵在坚持!大家可能有点疑问,为什么我建议大家选择C/C++作为自己主要的开发语言。首先,目前开发语言多如牛毛,但是我们每个人的精力和时间都是有限的,我们不可能精通所有的开发语言。所以,我们应该选择一门经典开发语言纵向深耕下去,C/C++是一个比较好的选择,与其他高级语言不同,C/C++为开发者提供了一些优化程序的机会,比如,我们可以通过指针直接操作内存,开发者要对内存管理负责,通过这些操作我们不仅可以深入掌握C/C++内部机制,而且还可以对操作系统、计算机原理等知识有进一步了解。帮助开发者全面掌控应用层开发和系统底层开发。但对于Java而言,开发者不需要对内存管理负责,Java自身的垃圾收集机制会自动管理内存,这样一来,虽然给开发者提供了便利,提高了工作效率,但是同时也阻断了开发者接触系统底层的机会,不利于开发者今后的发展,总体来说,弊大于利。我将C/C++比喻成“九阳真经”,只要学会了它,在学习其他武功秘籍的时候就能事半功倍,有种酣畅淋漓、一气呵成的感觉。
当大家在技术化阶段摸爬滚打几个年头后,就会慢慢发现一个成功的产品除了要靠技术,还需要前期的产品定位、交互设计、视觉设计,以及后期的测试、运营、销售。只有每个环节都做到最好,才有可能创造一个成功的产品。

很高兴您能耐心地阅读完这篇文章。以上只是本人的一点自我感触。后续我会持续分享自己的一些技术积累,详细安排如下:
以下是每周分享计划:
1.每周推送两篇C++开源经典库Boost用法介绍;
2.每周推送一篇C++ STL源码剖析;
3.每两周推送一篇Swift开发指南(基于iOS app以及AppleWatch app开发)
研究经典开源库是精通一门开发语言最好的方式。Boost和STL开源库是C++最经典的开源库,在这里包含了所有C++高级用法,想成为高手从这里开始。修炼一门武功主要包括两部分:招式和内功。所以,在这里我们通过学习Boost用法的方式达到修炼招式的目的;通过剖析STL源代码的方式达到修炼内功的目的。我想通过这种内外兼修的方式,一定能让大家一窥C++的本质。
最后,我还为大家提供了移动端iOS app以及可穿戴设备AppleWatch app开发的教程。C++由于其良好的性能主要用于服务器开发。所以,待大家掌握了互联网前后端技术后,我会为大家提供一个系统的视频教程,跟大家一起实现一个完整的互联网产品。

在这里,我跟大家一起开始程序员之路…

欢迎大家关注我的微信订阅号-程序员从这里开始

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值