首页 文章 精选 留言 我的

精选列表

搜索[独立开发者],共10000篇文章
优秀的个人博客,低调大师

寒冬之下,移动开发没人要了, iOS 开发者该 何去何从?

前言: 作者 | 梅梅 文章来源 CSDN 对于移动互联网而言,2018 年像是球场上的一声裁判哨。哨声响起,高潮迭起的上半场结束。本该再创辉煌的下半场,还没开赛却被告之:规则改变、场地收缩、教练下课、冷板凳无限加长。 这样前途未卜的下半场,你还敢上吗? 作为队伍「前锋」的移动端程序员,面对这样的挑战,又有哪些不一样的表现和前景?本文将结合招聘数据和候选人采访,展现移动端程序员「冰火两重天」的 2018 年。 2018:移动端上半场宣告结束 纵观近几年的平台数据,虽然移动端市场供需从 2016 年开始呈下降趋势,但是人均面邀数一直小幅增长。然而,2018 年这一趋势被彻底打破。 相比于 2017 年,2018 年 Android 程序员人均面邀数减少 40%,iOS 程序员降幅更高达 57%,即平均每个移动端程序员在找工作时收到的面邀数比去年减少一半。 其实也不难理解,现在互联网大环境不好,公司想招的是能帮公司打硬仗的人,而不是还要别人带教的小白。在总结失败经验时,认为我们自己除了工作年限的「硬件」不够,对于底层核心技术和基本原理的缺失,也是一大硬伤。 以前公司招移动端程序员,主要看你做过哪些项目,会不会画 UI,能不能写界面和业务逻辑。但是现在面试除了问你项目经验,还会问底层和原理的问题,甚至会延伸到公司的业务和数据。如果平时只顾埋头敲代码,肯定一问三不知。 通过 2017 和 2018 年不同工作年限移动端程序员的人均面邀数和面邀均薪进行比较,2018 面邀数下降幅度最大的,是工作 4-6 年的程序员。 而在全年整体面邀数下滑的情况下,工作 7-9 年和 10 年以上的程序员,收到的人均面邀数却实现了小幅增长。在面邀薪资方面,工作 7-9 年和 10 年以上的求职者的面邀薪资也一路「高歌猛进」。 「大龄」一直被视为程序员职场「催命符」。但在2018 年的经济寒冬,大龄移动端程序员却似乎迎来了久未谋面的「春天」。 此前的文章中曾多次探讨过程序员的「中年职场危机」问题,在各类社交媒体上,关于程序员「35 岁失业危机」的讨论也从未断绝。 很多人认为程序员这一行吃的是青春饭,35 岁职业生涯就到头了。虽说程序员需要拼体力,但是35 岁还在拼体力的程序员,绝对不会是一个优秀的iOS程序员,被淘汰也是理所当然的。 对比企业关于初级移动端程序员和资深移动端程序员的招聘要求,很明显可以看出,初级移动端程序员的招聘要求主要是熟练的语言基础,而资深移动端程序员则需要对设计模式、深层管理机制、底层原理有足够的理解,能从全局上对产品的设计和开发进行把控。 俗话说,姜越老越辣。对于移动端程序员而言,「辣」的不只是资历,更是「全局观」与「掌控力」。 2019:逆风而上,方是勇士之举 2018 年对于移动端人而言,是「兵荒马乱」的一年。中兴、华为先后遭欧美国家打压,苹果手机遭起诉,在中国的销售前景不明,中国移动端市场进入「淘汰期」。2019 年的移动端市场发展,是一个让人「忐忑不安」的未知数。 与此同时,移动端的技术迭代从未停住脚步。谷歌推出 Flutter 框架和 Dart 语言,Facebook 大规模重构 React Native,华为确认正自主研发手机操作系统替代 Android。2019 年的移动端技术发展,注定是「只见新人笑,不闻旧人哭」的新里程。 作为 2018 年移动端跳槽「薪资王」的杨辉,凭借自己稳扎稳打的 7 年移动端经验,成功以 65 万年薪跳槽至现在的公司。在谈及移动端技术的「变革」时,他非常坚定地认为:现有的移动端技术短期内依然「不可替代」,但是未来会和更多的新领域进行融合与合作。 「包括智能汽车、智能电视、AI、VR 产品都和安卓系统有关联,都是在安卓系统上做出的创新。移动端音视频也能和 AI、推荐算法融合。」 饿了么架构师 MM 也表达了同样的观点。「移动端的需求一直都在。但是未来需要移动端程序员往最底层和原理研究。对于程序员,到了一定阶段,不应该被语言和平台限制。」 同时,他们都提出,即使有一天现有的移动端技术真的被取代,对于真正「功力深厚」的移动端程序员也造不成任何威胁。因为技术是相通的,之前的开发经历完全可以复用和迁移。 但是对于那些「什么基础都没有,只会画UI,写界面,写业务逻辑」的移动端程序员而言,技术和语言的转变则会是「灭顶之灾」。 在谈到当下移动端程序员普遍存在的问题时,MM 提到了以下几点: (1)只重视过程,不重视结果。有些移动端程序员虽然加班很多,但是产出的质量和工作时间不成正比。 (2)不关心数据。做了技术方案却不测试数据。但其实测试数据很重要,关乎很多核心的要点。 (3)不沟通,不交流。部分移动端程序员喜欢闷头做事,对自身的成长非常不利。只有经常参与别人的讨论才能发现自己的短板,更大程度地获得进步。 (4)没有 owner 精神。一些移动端程序员不能把事情做到有始有终,没有负责的态度。 (5)不学习。移动端是一个新技术更迭换代很快的行业,如果不学习,很容易被淘汰。 想要在市场和技术双重冲击的 2019 年「逆风而上」,移动端程序员需要注意以下几点: (1)跨平台一站式开发将是未来趋势,要注重积累相关技术经验 从Facebook推出的RN(ReactNative)到近期 Google 推出的 Flutter,包括很多小程序快应用,都是移动端跨平台技术应用的尝试。虽然很多跨平台方案都有优缺点,至今没有完善的替代方案,但这是未来移动端开发不可逆转的大方向。 对于这些跨平台技术,即使在日常工作中不常使用,也需要不断学习跟进,为即将到来的改革做好充足的准备。 (2) 对于行业的选择要更加谨慎,切勿「金钱至上」 做程序员,一方面练技术,另一方面选行业也特别重要。因为持续的行业经验对职业发展有很大益处,也能规避过高的波动和风险。2018 年 P2P 的暴雷就给移动端程序员和全体互联网人敲响了警钟。 不过,具体的行业选择是一个仁者见仁智者见智的问题,MM 的个人经验是:「选择一个真正能对人的生活产生价值的行业,比如出行、生活服务等等。移动端程序员要有行业风险判断意识,要重「技术」和「产品」,不能一味地看重高薪,要知道高收益也往往意味着高风险。」 (3)做好职业规划,为自己建立良好口碑 切记做好职业生涯规划和时间管理,要有充分的时间去和别人做交流,了解「业界大佬」的做事内容和方式。人脉对于程序员很重要,不要拘泥于自己的小圈子,要去结识更多有能力的人,寻找更多的前进动力。另外,求职者如果拥有良好的人脉和业界口碑,在开源社区和别人有过合作,或者自身拥有开源代码,得到大家的认可,很容易不经过面试就得到新的工作机会。 (4)寒冬之下,更好地学习提升才是王道 2019 年不是颠覆性的一年,但是新技术会不断出现,「安于现状」是移动端程序员的大忌。每年苹果、Google、Facebook 等全球领先互联网公司推出的新技术一定要关注,对于底层知识架构需要不断加深。 此外,在本行业深耕细作的基础上,要不断扩展自身的技术栈,对于行业知识进行深入了解。除了阅读书籍,还可以通过老司机 iOS 周报、SwiftGG 翻译组、业界大牛的博客等途径获取相关的学习方法和内容。 「2019 年会是过去十年中最差的一年,却是未来十年中最好的一年。」这是最近流行于网络的一个段子。但是在移动端的球场上,即使比赛会越来越艰难,但是下半场的哨声已经响起,继续踢下去的「勇士」才可能赢得胜利。 2019 年移动端下半场,你准备好上场了吗 文章来源于网络,如有侵权,请联系小编删除。

优秀的个人博客,低调大师

Python 核心开发者:Python 之父的退休没有带来影响

距 Python 创始人Guido van Rossum 宣布脱离 Python 决策层辞去 BDFL 身份已有一个多月时间,Python 内部究竟有何变化?在上周末举办的 PyBay 2018 大会上,Python 核心开发团队成员、顾问兼演讲者 Raymond Hettinger 在接受外媒The Register 采访时表示,Python 之父的退休并没有真正改变什么。 Guido 的退休没有对 Python 的发展进程带来改变。Guido 给我们留下了一个“自治”的挑战,而在自治这一点上,目前没有具备争议和难度的东西需要解决。 另一位技术指导讲师Simeon Franklin 也表示,如今的 Python 是由 30-40 人一起在管理的 —— “Nothing is really changing that much”。 根据 Hettinger 所述,目前 Python 代码 check in 和 bug 修复的速度与 Guido 离开之前基本相同。Guido 本身在历史上的角色也是在一些语言发展方向上做出决定的人,而不是管理流程的人。 Hettiner 补充道,核心开发团队即将迎来爆发,因为没有了 Guido van Rossum 作为仲裁者,该团队需要担负更多责任。在过去,他们可以有相对疯狂的想法,因为他们知道如果有什么东西超过了底线,屋子里会有一个成年人说,“不,我们不能那样做”。但现在,他们需要自己做决定。 来自:The Register 编译:开源中国

优秀的个人博客,低调大师

对开发者有用的英文网站合集,建议收藏!

​​问答社区 Stack Overflow: subscribe to their weekly newsletter and any other topic which you find interesting Quora: A place to share knowledge and better understand the world Learn Anything: Community curated knowledge graph of best paths for learning anything devRant: Community where you can rant and release your stress Codementor: A mentorship community to learn from fellow developers via live 1:1 help and more. 新闻 Hacker News: news aggregator for programmers where civility is king, try a newsletter to get top news to your inbox: Hacker Newsletter: curated by hand, delivered weekly Hacker News Digest: curated automatically, delivered as frequently as you want Ars Technica: posts unique quality articles ACM TechNews Lobsters: Lobsters is a technology-focused community centered around link aggregation and discussion. TechCrunch: another good website for tech news GSMArena.com: news related to latest mobile phones and android. product hunt: Discover your next favorite thing AlternativeTo: Crowdsourced software recommendations Better Dev Links: Weekly links to help you become a better developer 初学者的编程练习 freeCodeCamp: Learn to code and build projects for nonprofits. Build your full stack web development portfolio today Reddit.com/r/dailyprogrammer: interesting programming challenges where you can learn from looking at other's code , even if you are not able to solve code you can look at how others solved. Programming by Doing: very good site for those who want to start with absolute basics CodeAbbey - a place where everyone can master programming: Best place to begin with problems that start at the easiest and gradually increase difficulty with each problem. Exercism.io: download and solve practice problems in over 30 different languages, and share your solution with others. Programming Tasks: large collection of small programs karan/Projects-SolutionsSolutions to most of the problems in the link above Lod - Cloud: The Linking Open Data cloud diagram Cave of programming: Learn to program, Upgrade your skills. Codeacademy: Learn to code interactively, for free. 找找项目灵感 martyr2s-mega-project-ideas-list: contains about 125 project ideas from beginner to intermediate level. karan/Projects: a large collection of small projects for beginners with Wrong "big projects" for beginners: How to choose where to start vicky002/1000-Projects: Mega List of practical projects that one can solve in any programming language! 大牛的建议 Things I Wish Someone Had Told Me When I Was Learning How to Code — Free Code Camp: What I’ve learned from teaching others Lessons From A Lifetime Of Being A Programmer: The Codist Header Lessons From A Lifetime Of Being A Programmer Principles of Good Programming: The Principles of Good Programming What every computer science major should know: The Principles of Good Programming How to become a programmer, or the art of Googling well Code Review Best Practices: Kevin London's blog Dieter Rams : 10 Principles of Good Product Design 10-ways-to-be-a-better-developer Working as a Software Developer Software design pattern: The entire collection of Design Patterns. Design Patterns: Design Patterns explained in detail with examples. 编码规范 CS 106B Coding Style Guide: must see for those who create spaghetti Google C++ Style Guide Airbnb JS Style Guide: A mostly reasonable approach to JavaScript Airbnb Ruby Style Guide: A ruby style guide by Airbnb What are some bad coding habits you would recommend a beginner avoid getting into? Good C programming habits. • /r/C_Programming How to Report Bugs Effectively Debugging Faqs Stuff you need to Code Better! Directory of Online CS Courses Directory of CS Courses (many with online lectures) Angular 1 Style Guide: Officially endorsed style guide by John Pappa 通用工具 regex101: Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript CodePen: Front End Developer Playground & Code Editor in the Browser 面试准备 Pramp | A free on demand interview practice platform for Software Engineers: Practice coding interviews with real peers GeeksforGeeks | A computer science portal for geeks: also subscribe to their feeds to get links to their new articles. A site for technical interview questions, brain teasers, puzzles, quizzles: whatever the heck those are) and other things that make you think! Problems | LeetCode OJ: Coding practice for interviews Programmer And Software Interview Questions Answers Reddit.com/user/ashish2199/m/puzzles: Logic Puzzles A Collection of Quant Riddles With Answers Aptitude Questions and Answers: Quant and aptitude preparation Interview Archives - Java Honk Top 10 Algorithms for Coding Interview Algorithm design canvas) Big-O Algorithm Complexity Cheat Sheet Unix / Linux Cheat Sheet How to interview How to Ace an Algorithms Interview Delightful Puzzles visualising data structures and algorithms through animation Here's How to Prepare for Tech Interviews • /r/cscareerquestions Guide to Tech Interviews Why You Make Less Money • /r/cscareerquestions IIT Delhi Placement Experience what_are_your_goto_questions_for_the_do_you_have? /r/cscareerquestions: Here's a pretty big list of programming interview questions I compiled while studying for big 4 interviews. I think you guys will find it useful! • Interviewing At Jane Street How to prepare for an interview - 1 Summer Internship: The Ultimate Guide The 25 most difficult HR questions Job interviews News, Videos, Reviews and Gossip - Lifehacker How to Answer the Toughest 40 Job Interview Questions | ICS Job Portal Job Interview Questions and Best Answers How to Answer "Tell Me a Little About Yourself" | The Art of Manliness Job Interview: How to Ace a Job Interview | The Art of Manliness Give your résumé a face lift BIG O Misconceptions Bitwise tricks Core Java Interview questions - Interview question on each topic Java Interview Questions and Answers Big collection of interview preparation links • /r/cscareerquestions Unsolicited_advice_for_job_seekers_and_employers five-essential-phone-screen-questions - steveyegge2 CS9: Problem-Solving for the CS Technical Interview Mission-peace/interview problems: A large collection of coding interview problems SQL Joins explained using venn diagram 10 Frequently asked SQL Query Interview Questions Get Ready to Learn SQL: 8. Database Normalization Explained in Simple English - Essential SQL Programming Language Concepts: Lecture Notes: OOPs concepts and programming language concepts. We Help Coders Get Hired: website offering courses on system design, interview strategies, soft skills etc checkcheckzz/system-design-interview How to Break Into the Tech Industry - a Guide to Job Hunting and Tech Interviews Freshers Interviews C PUZZLES, Some interesting C problems wu :: riddles(hard): logic puzzles and riddles github.com/odino/interviews: list of important questions for interview svozniuk/java-interviews: Java interview questions kimberli/interviews: study sheet for Interview Determining the big-O runtimes of these different loops?: really good stackoverflow question that covers basics of calculating runtime complexity. ChiperSoft/InterviewThis: questions to ask during on a interview to know more about the company. SQL interview questions: great SQL test 视频 Machine that Changed the World - a very good documentary about history of computers Part 1: Giant Brains Part 2: Inventing the Future Part 3: The Paperback Computer Part 4: The Thinking Machine Part 5: The World at Your Fingertips Triumph of the Nerds: Play-list Project Code Rush - The Beginnings of Netscape / Mozilla Documentary The Code: Story of Linux documentary Breaking the Code: Biography of Alan Turing Mechanical Computer (All Parts): a very good video from 1950s explaining how mechanical computers used to work without all the modern day electronics. Download: The True Story of the Internet: Play-list of discovery channel documentary on browser wars , dot com bubble and more. Teach Yourself Computer Science How does CPU execute program (video) Machine Code Instructions (video) Harvard CS50 - Asymptotic Notation (video) Cracking The Code Interview Cracking the Coding Interview - Fullstack Speaker Series Ask Me Anything: Gayle Laakmann McDowell (author of Cracking the Coding Interview) MOOCs Class Central: a directory of 100,000+ student reviews of thousands of MOOCs. NPTEL Vidoes COMP_SCI_ENGG Coursera.org edX MOOC.fi: Free online courses from the University of Helsinki Udacity Kadenze | Creative Programming: Programming courses focused on art and creativity UCBerkeley MIT OCW Electrical Engineering and Computer Science CS50 prakhar1989/awesome-CS-courses: List containing large amount of CS courses Computer Science Resources: list of MOOCs for autodidacts Java Java Revisited: good for learning about Java Language and interview preparation. The Java™ Tutorials: The best tutorials for Java. Java Corner at Artima.com Java Visualizer: helps visualize references , values of variables ect Java Lecture Notes Learning Java: a free online textbook for learning Java Free Online Chapters of Inside the Java Virtual Machine by Bill Venners Understanding JVM Internals How Garbage Collection Works Welcome to JavaWorld.com The Java Memory Model Netbeans Keyboard Shortcuts: Keyboard shortcuts to enhance your productivity when working in Netbeans. XyzWs Java FAQs: large collection of java interview questions Search Open Source Java API: view source of java library and learn how things are implemented. JournalDev - Java, Java EE, Android, Web Development Tutorials Implementation of Algorithms and Data Structures, Interview Questions and Answers what-is-garbage-collection: Demystify the garbage collection Best books for learning java must read: Get basics of Java Garbage collection (Java); Augmenting data str (video) Compilers (video) Deep Dive Java: Garbage Collection is Good! The C++ Programming Language: The C++ Programming Language. Bjarne Stroustrup's FAQ: The C++ FAQ Bjarne Stroustrup's C++ Style and Technique FAQ: The C++ FAQ C++11 - the new ISO C++ standard: The C++11 FAQ AI Unsupervised Sentiment Neuron: Unsupervised Sentiment Neuron Robots that learn: Robots that Learn grakn.ai: The Database for AI 学习写作 Advice on Research and Writing Seminar and reports PHD MS Articles Practical Tips for Talking at Usergroups and Conferences and Giving presentation on software project to non-programmers YouTube 频道 Computerphile: Must watch for every CS student ComputerHistory: for those who like to know how we reached where we are. GoogleTechTalks: videos on trending topics and cool stuff happening in the tech industry. Placement Grid: Interview and campus placement experience Google Developers Facebook Developers O'Reilly: interviews and talks of world's best technical writers. Java: talks related to java JavaOne: Java Conference CppCon: C++ Conference C++Now (BoostCon): C++Now (previously BoostCon) conference Meeting C++ YT Kanalseite: Talks on C++ ThinMatrix: blogs and tutorials developer making a 3d game in Java using opengl yegor256 Scott Meyers: Past Talks thoughtbot: talks on various topics code::dive conference: code::dive conference organized by NOKIA Wrocław Technology Center HowToBecomeTV: contains good interviews of developers and people related to tech industry. Siraj Raval: Artificial Intelligence and deep learning tutorials videos Netflix UI Engineering: great videos to watch for web developers, mobile developers and those interested in some of Netflix's tech stack Coding Blocks: Tutorials, how to's, tips and tricks Fun Fun Function: A weekly series from Mattias Petter Johansson on an assortment of programming topics, including some not directly related to coding. 一些文章集合 Expectations of a Junior Developer The Key To Accelerating Your Coding Skills A Software Developer’s Reading List: Some good books and links in there. 40 Keys Computer Science Concepts Explained In Layman’s Terms What every programmer should know about memory, Part 1 We are reinventing the retail industry through innovative technology Unicode What every programmer absolutely, positively needs to know about encodings and character sets to work with text List of algorithms Dive into the byte code Data Structure Map A Gentle Introduction To Graph Theory Linux Inside A programmer friendly language that compiles to Lua. 播客 Coding Blocks - Learning principles, patterns and better practices on the go MS Dev Show The Cynical Developer Herding Code Code Newbie Software Engineering Radio: A podcast targeted at the professional software developer. The goal is to be a lasting educational resource, not a newscast. JavaScript Jabber: A weekly discussion about JavaScript, front-end development, community, careers, and frameworks. Developer Tea: A podcast for developers designed to fit inside your tea break. Full Stack Radio: Everything from product design and user experience to unit testing and system administration. Software Engineering Daily: A daily technical interview about software topics The Bike Shed: Guests discuss their development experience and challenges with Ruby, Rails, JavaScript, and others. The Changelog: A weekly conversation that gets to the heart of open source technologies and the people who create them. Front End Happy Hour: A podcast featuring a panel of Software Engineers from Netflix, Evernote, Atlassian & LinkedIn talking over drinks about all things Front End development. 构建一个简单的编译器/解释器 Awesome Compilers: Curated list of awesome resources on Compilers, Interpreters and Runtimes. Resources for Amateur Compiler Writers Possibly the smallest compiler ever Writing My First Compiler Structure and Interpretation of Computer Programs Let’s Build A Simple Interpreter. Part 1. Growing a compiler 教程 Subtle | Poor Man's CI: Learn how continuous integration platforms work under the hood, by building one of your own on top of git with Node.js Tutorialspoint W3Schools Online Web Tutorials Open Data Structures: Excellent resource for learning about DS and algos , provides code in various languages C++ , Java , pseudocode Data Structures and Algorithms by John Morris: another good source with code and its analysis CMSI 281: Data Structures: light weight introduction to DS How to Program in C++: Good resource for revising C++ topics and STL TopCoder Tutorials A Hacker's Guide to Git: for those wanting to learn git with a solid foundation Git from the inside out Learn UNIX in 10 minutes The Bash Guide: very good guide for learning the Bash Shell Linux Tutorial: good resource for learning Linux UNIX Tutorial - Introduction Linux Tutorial for Beginners Learning the shell. Dynamic programming - PrismoSkills: very good resource if want to learn how to solve DP problems. Deep C: very good presentation on C language C programming language Frequently Asked Questions OS Course Notes: Chapter wise course notes according to Galvin's book SQL (Structured Query Language) in one page : SQL.SU: a very good SQL cheat sheet Introduction to C Programming MySQL Essentials http://www.mysqltutorial.org/ Best Of - Gustavo Duarte: contains articles on various topics Collecting all the cheat sheets: cheat sheets for lots of programming languages The Descent to C: for those moving to C from some higher programming language like java or python. VimTutor+: learn VIM from browser itself Linux Journey: good site for learning linux C Programming CS 2112/ENGRD 2112 Fall 2015: Good notes on data structures and algorithms. More about Github-flavored markdown The Unix Programming Environment The Linux Command Line: A Complete Introduction TCP/IP Illustrated Series Head First Design Patterns Design Patterns: Elements of Reusable Object-Oriented Software: aka the "Gang Of Four" book, or GOF UNIX and Linux System Administration Handbook, 4th Edition Programming, Web Development, and DevOps news, tutorials and tools for beginners to experts 阅读他人的代码 LiveEdu.tv: screencast of people building application, websites, games, ect. 程序员须知 Programmer Competency Matrix: article for knowing what our level as a programmer is. GitHub.com Build software better, together: Place to showcase your project and collaborate with others. (Must know Git in order to use it effectively) Gitlab offers free unlimited (private) repositories and unlimited collaborators. 编程比赛 WakaTime: leaderboards of coding metrics collected via editor plugins HackerRank Codeforces topcoder UVa Online Judge: hundreds of problems supporting multiple languages. HackerEarth - Programming challenges and Developer jobs CodeChef PKU ACM ICPC Practice problems Archived Problems - Project Euler Google Code Jam Practice and: past contest problems for practice Sphere Online Judge (SPOJ) Art of Problem Solving Riddles.io AI Games: Compete with your bot and dominate the leaderboards! Codingame: Learn coding through games and challenges! Codewars: Rank up by completing code kata Codefights: Test your coding skills 计算机图书 IT eBooks - Free Download - Big Library: website for downloading ebooks without any advertisement and instant downloads. github.com/vhf/free-programming-books: More than 500 free ebooks on almost any language you can think of Computer Science Books Online: about 150 computer free ebooks Best books for GATE CSE cses.fi/book.html Become a Programmer, Motherfucker (list of books): Exhaustive list of books from Zed A. Shaw. 视频教程 Tushar Roy: Algorithm and Data structure tutorial by an Indian Youtuber. Derek Banas: good quality tutorials thenewboston: good but with too much talk as compared to actual content mycodeschool: Data structures and algorithms tutorials CodingMadeEasy: C++ tutorials XDA-University - Helping You Learn Android Development DevTips: web dev tutorials codedamn: front end web dev tutorials Design and Analysis of Algorithms Vim Tutorial Videos - Flarfnoogins: good video tutorial for learning vim CS1: Higher Computing - Richard Buckland UNSW: a very good introductory CS course Kathryn Hodge: Has good videos for beginners 在线编译 CodePad: Code editor to try, test and run 25+ languages JSFiddle: Test your JavaScript, CSS, HTML or CoffeeScript with online code editor Ideone.com: online compiler and debugging tool for more than 60 programming languages Pastebin.com Godbolt.org: Excellent tool for exploring the assembly output of different compilers with and without optimization. 一些不错的博客 Coding Horror: one the best coding blog WildMl: A blog for machine learning. Armin Ronacher's Thoughts and Writings: blog on Python and open source Eli Bendersky: everything from Python to LLVM Joel on Software Stephen Haunts { Coding in the Trenches } Programming in the 21st Century Clean Coder Blog: blog of author of book "Clean Code" Programming Blog: programming blog of Yegor Bugayenko CodeAhoy: Blog on software and human factors. 100% Tested on Humans. stevehanov.ca Geek Land Late Developer IT Enthusiast blog.might.net CSE Blog - quant, math, computer science puzzles Small Programming Challenges and Puzzles My Tech Interviews HackerEarth Blog Algo-Geeks CoderGears Blog Insights from: the CoderGears Team Runhe Tian Coding Practice Paul Graham Essays Dan Dreams of Coding Antonio081014's Algorithms Codes Math ∩ Programming Takipi Blog: mainly focuses on Java and JVM languages Coding Geek - A blog about IT, programming and Java Daedtech.com: Stories about software Archives — Ask a Manager: HR related stuff 英语学习 Quia - English Punctuation and Capitalization Rules Guide to Grammar and Writing: for those who want to improve their english language skills Purdue University Online Writing Lab (OWL) Englishclub.com/learn-english 无聊时可以看看这些 r/ProgrammerHumor: Subreddit dedicated to exactly what it sounds like Vsauce: The best youtube channel TED: Great talks about technology, entertainment, and design CrashCourse: small courses on various subjects National Geographic: High volume of high quality content from all over the world Barcroft TV: Daily short documentaries about the incredible variety of people that make up the world ColdFusion: Past, present, and future of technology SmarterEveryDay: Lots of amazing scientific information about the world around us, usually captured with a high-speed camera SciShow: Answers to interesting questions that you've always wondered about Big Think: Expert driven, actionable, educational content, featuring experts ranging from Bill Clinton to Bill Nye Every Frame a Painting: High quality analysis of films and filmmaking TestTube News: Interesting information about news from around the world Reddit the front page of the internet: Where free time goes to die

优秀的个人博客,低调大师

为安卓开发者介绍的移动开发框架 Flutter

我是TrueFace的高级软件工程师 Adel Boussaken。今天我要给大家介绍 Flutter 开发。欢迎加入 Dart 阵营。 我将跳过所有有关安装和运行 Flutter 应用程序的部分,直接进行操作,如果您不确定 Flutter 是什么,并且有许多问题,请阅读关于 Flutter 的演进之路。 Dart 如果你认为 Kotlin 是 Java 的替代,等到你看到 Dart 后,你会发现它是直截了当,没有样板代码的: 默认为public,通过前缀“_” 进行私有化; 集合;点击试用 一切都是对象 - 没有“primitives” 命名参数,可选参数,默认值:点击试用 属性 -无需在任何地方写“get”方法 级联 -一切都是构建者 使用strong mode类型推导 - 只需要在本地写“var” 命名构造函数,自动分配到字段;点击试用 字符串插值,几种类型的字符串;点击试用 dartfmt -如果不想格式化也可以不用这个工具 这里有一个 Dart 代码的例子,一个获取 IP 地址的私有方法: _getIPAddress() async { String url = 'https://httpbin.org/ip'; var httpClient = createHttpClient(); var response = await httpClient.read(url); Map data = JSON.decode(response); String ip = data['origin']; } 设计模式 我很确定你已将你的 Android 技巧从无序代码扩展到 MVC、MVP、MVVM,Dagger2、DataBinding 和Android 架构组件,Flutter 基本上就是一个 V(View),响应式视图,它可以是无状态或有状态的 widget,就连 AppCompatActivity 也是一个 widget。 让我们创建一个非常简单的 Activity,我们需要一个文本视图和一个更新该文本的按钮,下面是 Activity 代码(注意没有 XML): public class Click extends Activity { int count = 0; protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.main); final Button button = (Button) findViewById(R.id.button); final TextView text = (TextView) findViewById(R.id.counter); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { count++; text.setText("Button clicked " + counter + " times"); } }); } } 在 Flutter,你不需要操纵视图,就像 setText() 中的代码,你可以使用 state 来替代,并且 Flutter 将会处理好屏幕更新,在 Flutter 中和上述代码等价的是: import 'package:flutter/material.dart';class Activity extends StatefulWidget { @override ActivityState createState() => new ActivityState(); }class ActivityState extends State<Activity> { int counter = 0; @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: new Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ new Text( 'Button clicked ${counter} times', ), new FlatButton( child: new Text('Increment'), onPressed: () { setState(() { counter++; }); }, ), ], ), ), ); } } 你也注意到,我们在 setState 中增加了 counter 的值,一旦 onPressed 被触发(之后是 setState),Flutter 将会使用新的 counter 值来重新渲染整个 widget 和 text 对象。 分离 widget 和 state(对于 Android 开发人员来说)的最大优点是,如果你在 Java 代码中旋转设备或调整窗口大小(支持多窗口),则计数器的值将被重置为零,你必须编写大量重复代码来管理 Activity 的生命周期。而在 Flutter 中,这是不需要的,现成的功能,无需额外的代码。 虽然 Dart 最终编译为 native 代码,但它不会访问硬件设备,例如,如果你要获取用户位置,你必须使用平台通道编写特定平台的代码,与此同时,确实有很多插件来处理这些情况,但你依然希望登录Android Studio(或 Xcode)在代码之间完成该事项。 Async/Await 在 Android 开发中,UI 线程非常重要,完成速度稍慢的事情工作,会显示以下神秘行: I/Choreographer(1378): Skipped 55 frames! The application may be doing too much work on its main thread. 这种情况你只能使用线程来处理,如下所示: public void onClick(View v) { new Thread(new Runnable() { public void run() { // a potentially time consuming task final Bitmap bitmap = processBitMap("image.png"); mImageView.post(new Runnable() { public void run() { mImageView.setImageBitmap(bitmap); } }); } }).start(); } 上述代码可以很简单的使用 Dart 完成: onClick() async { Bitmap bitmap = await processBitMap("image.png"); // you don't want to update non-existent widget if (!mounted) return; setState(() { imageView = bitmap; }); } 这里发生了什么? async 修饰符标记的方法会安排稍后执行,该方法变成非阻塞的,因此你的应用程序不会丢失任何帧,await 修饰符挂起方法的执行,等待 processBitMap 完成,然后执行将会恢复。 Widget 目前有大量在 Android 之上运行的各种 OEM 软件和皮肤,这都是可以理解的,因为每个制造商都希望为其设备建立自己的附加值,我不能计算我究竟说了多少次“Funck S*ms*ng”,OEM 定制对 Android 开发人员引入了很多难题.。 Flutter,为了实现 120FPS 的目标,已决定开始在一个空的画布上,使用Skia2D 图形库绘制每个 widget,而不是重用 OEM widget,并实现大多数 Material Designa 和通用 layout。 这种方法,无法保证你的应用程序在多种设备上看起来是一样的,尽管并不是所有的 Flutter widget 都经过优化,可以在平板电脑上也可以在较小屏幕的设备上正常工作。 无论如何,这种方法也为 UI 设计的创新打开了新的大门,例如,以下的代码可以使得用户改变 Activity 的大小: class HeroScreen extends StatefulWidget { @override HeroState createState() => new HeroState(); }class HeroState extends State<HeroScreen> with SingleTickerProviderStateMixin { bool _scaling = false; Matrix4 _transformScale = new Matrix4.identity(); double scalePos = 1.0; set _scale(double value) => _transformScale = new Matrix4.identity()..scale(value, value, 1.0); @override Widget build(BuildContext context) { return new Scaffold( body: new GestureDetector( onScaleStart: (details) { setState(() { _scaling = true; }); }, onScaleUpdate: (details) { var n = details.scale; setState(() { scalePos = n; _scale = n; }); }, onScaleEnd: (details) { setState(() { _scaling = false; _scale = scalePos < 1 ? 1.0 : scalePos; }); }, child: new Container( color: Colors.black26, child: new Transform( transform: _transformScale, child: new Center( child: new Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ new Text(_scaling ? "Scaling" : "Scale me up"), ])))))); } } 这让我们得到一个非常有趣的小部件,这样去写可重复使用的小部件就太容易了, 我可以将以上不太友好的代码转换成可重用且干净的小部件: class Scale extends StatefulWidget { final Widget child; final GestureScaleStartCallback onStart; final GestureScaleEndCallback onEnd; final GestureScaleUpdateCallback onUpdate; Scale({Key key, this.child, this.onStart, this.onUpdate, this.onEnd}) : super(); @override ScaleState createState() => new ScaleState(); }class ScaleState extends State<Scale> with SingleTickerProviderStateMixin { Matrix4 _transformScale = new Matrix4.identity(); double scalePos = 1.0; set _scale(double value) => _transformScale = new Matrix4.identity()..scale(value, value, 1.0); @override Widget build(BuildContext context) { return new GestureDetector( onScaleStart: widget.onStart, onScaleUpdate: (details) { widget.onUpdate(details); var n = details.scale; setState(() { scalePos = n; _scale = n; }); }, onScaleEnd: (details) { widget.onEnd(details); setState(() { _scale = scalePos < 1 ? 1.0 : scalePos; }); }, child: new Container( color: Colors.black26, child: new Transform( transform: _transformScale, child: widget.child))); } } 重构后的代码如下: class HeroScreen extends StatefulWidget { @override HeroState createState() => new HeroState(); }class HeroState extends State<HeroScreen> with SingleTickerProviderStateMixin { bool _scaling = false; @override Widget build(BuildContext context) { return new Scaffold( body: new Scale( onStart: (details) => setState(() => _scaling = true), onUpdate: (details) {}, onEnd: (details) => setState(() => _scaling = false), child: new Container( color: Colors.black26, child: new Center( child: new Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ new Text(_scaling ? "Scaling" : "Scale me up"), ]))), )); } } Etc 即时运行称为热重新加载,需要不到一秒钟 Flutter 使用 CPU 绘制图形、使用GPU 渲染, 但是一些关于 3D 的 API 是不可用的 不用 XML 来设计布局 布局只需一次性计算树的大小 即使有语法错误,您的 APP 也不会崩溃 Flutter 小部件可以嵌入到 Android Activity 中 您不能在 Flutter 小部件中嵌入 Android 库 至少需要 60 FPS,除非你的机器正在做别的事情 受到 React 的启发设计 了API,但不是像 React 那样运行的 不需要任何 POJO 原文发布时间为:2017-10-10 本文作者:佚名 本文来自云栖社区合作伙伴“51CTO”,了解相关信息可以关注。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册