-
打个分吧:

软技能2:软件开发入门世界观

软件开发是什么?软件开发者需要拥有哪些技能?软件开发有哪些方向?软件开发如何求职?

来源

  • 书名:《软技能2:软件开发者职业生涯指南》
  • 作者:[美] 约翰·森梅兹
  • 出版时间:2020-5-1
  • ISBN:9787115534538
  • 豆瓣链接:https://book.douban.com/subject/35043940/
  • 豆瓣评分:8.3⭐

如何学习?

  • 定目标;
  • 搜资源;
  • 学-做-复盘;

软件开发的流程?

  • 理解问题、收集整理需求
  • 设计解决问题的方案、搭建代码架构
  • 写代码
  • 测试部署

软件需要哪些技能?

  • 一门编程语言、数据结构与算法、框架/库/设计模式、数据库基础、源代码控制、调试与测试、构建与部署

学哪门编程语言?

  • 考虑当前与未来的就业前景选一门主流语言,一旦你学会了一门编程语言,学习第二门语言就容易多了。

怎样写简历?

  • 写清楚专业与技能、做过什么、如何做的、有什么成果
  • 针对不同岗位和需求,写不同版本简历

如何准备面试?

  • 准备常见面试问题
  • 练习编程和问答类型的面试题
  • 理清楚自己简历上写的经历

如何投简历?

  • 找人脉内推、找猎头推荐、网投

如何谈薪?

  • 了解薪资范围、行情,获得一个平均薪资
  • 不要直接透露目前薪资,一般公司都要求保密,可以给出整包的范围
  • 不要直接透露期望薪资,先了解整体待遇情况,以真实期望薪资+一定比例报价,留出谈判余地
  • 至少有一轮还价,要毫不犹豫的还价;最多3轮还价;
  • 多谈几份offer

主流编程语言世界观

  • C语言:使用最广,古老强大,可以访问计算机内存和底层部件,面向操作系统、底层硬件、嵌入式
  • C++:C的超集,常与C混用,用于扩展C的对象、类、虚拟函数等特性,广泛用于游戏开发,复杂度高
  • java:年代久远,运行在虚拟机上 虚拟机可以运行在任何平台上,面向对象 语法简洁,不允许直接操作内存和计算机底层
  • python:优雅简洁,用更少的代码来表示更多的语义,适合初学者,正在流行,面向对象、过程式、函数式都可以,解释型语言 无需编译
  • ruby:有趣简单,面向对象的脚本语言
  • javascript:1995起,web领域主流语言,解释型语言无需编译,可以嵌入浏览器执行;10天内创造出的语言 历史遗留问题多,最新的ecmascript已经修改了许多遗留问题;
  • swift:用于新一代ios、osx上的语言,支持许多objective-c的许多特性、比其简洁、易用、灵活
  • go:2007起,google创造的语言,和C一样面向系统,也正在被扩展到web;并发编程,无需考虑内存管理,性能强大;
  • haskell:在学术界受欢迎,纯函数式编程语言+强静态类型系统,可以编写高度可预测的代码,无任何副作用;学习难度大

主流开发方向世界观

  • web开发:
    • 是什么?开发在浏览器中显示与运行的网页
    • 特点?跨平台,运行环境、系统、软件类型、版本不可控
    • 技术?HTML代码编写网页显式内容、css代码控制内容的样式、javascript代码编写脚本逻辑;
    • 原理?浏览器将web代码渲染成网页;网页通过HTTP向服务器发送网络请求 获取数据;
  • 移动端开发:
    • 是什么?开发在移动设备上运行的程序(手机 平板 手表 穿戴设备 车机)
    • 特点?规模小,用途聚焦,容易构建,适合自由职业者,最有创业机会
    • 技术?ios原生开发用xcode、objective-c、swift;android原生开发用java和android sudio;跨平台开发用Cordova等;移动web开发 以web的形式制作移动程序;
  • 后端开发:
    • 是什么?所有不涉及用户交互界面的开发工作
    • 工作内容有哪些?检索、存储、处理数据,遵循&实现业务逻辑,参与构建系统架构、基础设施
    • 技术?java php  ruby  .net  等后端语言,SQL语言与数据库
  • 游戏开发:
    • 特点?难度大,竞争激烈,时间金钱投入大,盈利难
    • 技术?游戏引擎:unity3d(最主流)、unreal;接近底层硬件的编程语言,以便获取硬件平台的最高性能:C++(最主流);数学知识:矩阵转换、向量运算等图形计算
    • 学习方法?复刻大量游戏,由简入难
  • DBA:
    • 是什么?数据库管理员
    • 工作内容有哪些?建立 维护 监控数据库,维护数据库硬件,扩容 资源回收,定期备份与恢复数据库,建立数据库模式(数据库的空白副本),编写存储过程
  • DevOps:
    • 是什么?开发与运维人员
    • 工作内容?创建构建环境 让代码在服务器中部署 运行 测试

作为软件开发者,应该掌握的测试知识?

  • 作为软件开发者,应该有软件测试的知识背景,自测发现问题修复  远比测试人员发现问题提bug修复 节省时间和精力
  • 有哪些测试类型?
    • 黑盒测试:把软件本身看作黑匣子,只关心输入输出
    • 白盒测试:要了解软件内部的实现,根据代码实现来设计测试用例
    • 功能测试:测试系统实际功能
    • 验收测试/系统测试:执行一组测试以检验客户的实际需求和期望,针对系统整体运行效果的测试
    • 自动化测试:自动执行测试并且验证结果
    • 回归测试:验证系统是否按照以前的方式运行,避免新功能破坏现有的功能
    • 其他测试:负载、性能、恢复、安全、压力、可用性accessibility
  • TDD 测试驱动开发是什么?在编写任何代码前,先编写测试用例,将它作为软件应该做什么的规格说明
  • 单元测试是什么?编写测试程序,检查代码中"最小内聚单元"

源代码控制

  • 是什么?跟踪软件项目里不同版本文件和源代码的方法
  • 作用?减少丢失代码的可能性;支持定期备份;多人协同开发;多版本管理;
  • 应该掌握的基础知识有哪些?代码库、checkout签出代码、历史版本、分支管理、合并版本merge、版本冲突conflict
  • 流行的代码控制工具?git最主流

CICD

  • 是什么?自动化构建与持续集成
  • 作用?自动化提升效率、缩短反馈周期、改善质量
  • 典型工作流?开发者更新代码-CI软件检测到代码更新,触发自动构建,获取最新代码,编译代码 执行静态分析与单元测试-打包程序-部署
  • 流行的CI软件:jenkins、hudson、TravisCI、Teamcity、TFS

调试

  • 调试是什么?在代码中寻找问题的根源、检验假设
  • 如何调试?重现错误,定位问题(查看日志 报错信息,思考可能的原因,验证假设,检查前置条件,分治思想,二分法排查代码,逐步缩小范围)

代码维护

  • 在软件生涯中 维护旧代码比编写新代码要花的时间多,因此要学会维护代码
  • 目的?避免代码越来越糟;改善现有代码、编写可维护的代码、降低代码熵值
  • 如何维护?增强代码可读性,使其简洁、组织清晰,重构代码,在不改变现有功能的前提下,使现有的代码更具有可读性,写好清晰、简洁注释
  • 推荐资源?《代码整洁之道》、《代码大全》、《修改代码的艺术》、《重构:改善既有代码》
上次更新:

评论区