• 开源镜像
  • 开源沙龙
  • 媛宝
  • 猿帅
  • 注册
  • 登录
  • 息壤开源生活方式平台
  • 加入我们

开源日报

  • 开源日报第918期:《在线表格 Luckysheet》

    14 10 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《在线表格 Luckysheet》
    今日推荐英文原文:《When should you call yourself a senior developer?》

    今日推荐开源项目:《在线表格 Luckysheet》传送门:项目链接
    推荐理由:这个项目是开源的在线表格,具备了大部分 excel 中的常用功能,比如文字与单元格的样式调整与公式的使用等。除此之外还提供了独有的复制时转换格式(比如 json 等)以及其他格式的数据导入导出等。不过在图表方面现在只支持了常用的 ECharts,其他图表框架需要等待以后陆续支持。
    今日推荐英文原文:《When should you call yourself a senior developer?》作者:Eric Jeker
    原文链接:https://www.arcanys.com/careers/careertalk/seniority-levels-in-software-development
    推荐理由:试着通过一些标准划分自己作为开发者的等级——最终的目的还是提醒大家保持学习与成长

    When should you call yourself a senior developer?

    Experience, they say, is the best teacher, and the more experience you’ve had, the better you would be at handling a certain task. This, however, begs the question: Just how do you measure it? Well, as a software engineer at least, experience is not determined by the number of years you’ve been one. In fact, let’s ditch that misconception forever: just because you’ve been a developer for 15 years does not necessarily mean you’re a Senior developer.

    Let me illustrate why I say this without doubt: If within a 10-year period, developers just sit at their desk, working on the same old technologies in a static company, what they will be after 10 years would be older junior developers, and not exactly developers with the right experience.

    What we need to understand is that the market is not static. Technologies evolve, and so do the ways we develop software. In that environment, it’s not possible to simply learn a single thing and then use it for the rest of one’s career. The next 5, 10 or 15 years a software engineer spends working with that limited knowledge would take him or her nowhere near a senior position.

    Whether developers like it or not, or whether they are even aware of it or not, there is always a kind of competition among them. The moment a developer stops improving existing skills and learning new ones, his or her value will depreciate quickly, left behind by those who expand their range. Such is the industry we work in, and the sooner developers acknowledge the need to constantly hone their abilities, the sooner they can work their way up to higher levels.

    Pay does not necessarily equal value

    Ideally, you cannot ask for more money if you do not bring more value to a company or a customer. In reality however, some companies may pay more, either because they don’t know the value of their software engineers, or because they have an overabundance of resources; not necessarily because these developers are better. The market also evolves and this could lead to a particular language becoming rare or sought-after. When this happens, developers who have mastered this skill or language stand to earn more, but that doesn’t mean they have learned something new that will be valuable to their next employer.

    The danger is in software developers falling into a sense of complacency where they think that their pay scale is a measure of their technical level, and hence, they no longer seek to acquire additional knowledge. To summarize: Just because one is well-paid does not mean that he or she is actually good and worth that income.
    “Do not confuse motion and progress” Alfred A. Montapert

    Assessing your value as a developer

    Following the law of compensation written by Ralph Waldo Emerson a long time ago, your value as a developer depends on three aspects:
    • The NEED for what you do. (Can’t control; hard to predict)
    • Your ABILITY to do it. (Within one’s control)
    • The difficulty of REPLACING you. (Consequential of the other two)
    Of the three, the first aspect is the one that is completely beyond the control of the professional. It is the market that decides if a certain job or industry has a higher demand or thrives more than another. The third factor is dependent on the other two. If there is a need for one’s abilities, and a person is good at what he or she does, then there is an assurance of a decent job at all times.

    Thus, it remains that the only thing you can directly act on is your own skills and capabilities. No one should be content with just doing the same things over and over again. Just because a developer has been slinging code for years doesn’t automatically warrant ‘seniority’. There should be a plan and effort for continuous improvement. To improve, it is fundamental to understand what your “value” is in the industry you belong to, and then strive to increase it. Even if you aim poorly, it’s still better than doing nothing and going nowhere.

    As I recently explained in the clean coding presentation(https://www.arcanys.com/blog/the-importance-of-clean-code/), a software company does not and should not calculate the value of a developer by just counting the number of lines of code written and looking at the resulting complexity. Complexity, in fact, is expensive for a company. Instead, developers who write simple, readable code that is easily maintainable, provide more value to the team.

    One might argue that the very basic requirement should be a working software, and that is true to some extent. But these days, there is the need to offer more value to the organization. We developers should not be content with just producing code because that is only the start.

    Rising up the software engineering career path also requires developing other capabilities. Some people have the tendency to focus on only one aspect of their skillset. For instance, the most logical for a developer would be upgrading programming skills and technical knowledge. But the truth is, you can rarely excel at a software engineering job without building a full range of competencies—this includes soft skills such as communication and social skills, as well as some periphery skills including business and marketing abilities.

    Skill levels in software development

    Knowing where you stand in your knowledge as a developer is the first step in planning for your skills improvement. Below, I give a description of the three levels of progress for a software developer.

    Junior software developer

    Starting their journey in the development world, junior developers first have to deal with the logic behind programmation like loops, variables, conditional statement, and memory management.

    Then they learn the syntax of their prefered language, learn some code formatting, and work on how to implement basic algorithms like string and array manipulation, sorting, and searching. If they branch into web development, they also need to understand how the network works, study about protocols like HTTP, and learn what an API and a hosting platform are, among others.

    Further along, they have to fully understand the differences between compiled and interpreted code; between procedural, functional, and object-oriented programming; between synchronous and asynchronous execution; and learn about basic security principles. Knowledge of all these will help them choose the language they prefer to work with the most.

    The points below define the tasks of and expectations from junior developers:
    • They don’t yet see the difference between writing code and development; they focus solely on writing code.
    • They are given specific tasks which they can execute at their level, and create working software under the close supervision of more senior developers.
    • They often need a lot of time and help from other developers to solve problems that they may encounter.
    • They are not yet autonomous and have difficulty tracking down a problem to its root, and fixing it.
    • They know basic algorithms (e.g. searching, sorting), string and array manipulation.
    • They know how to access a database or an API and read/write data.
    • The code they produce is barely maintainable, readable, and reusable. There are no abstraction layers and the code is piled up in the same file or class (oftentimes in the controller). Reusability is achieved by copying and pasting code, ignoring the DRY principle.
    • A junior developer will fail to consider special cases—the list is empty, the client is offline, the input is incorrect, etc., and their code will crash as exceptions are improperly handled.
    • Consequently, they produce code with frequent quality problems.

    Mid-level software developer

    As developers progress in their careers, they will begin learning from their mistakes. They will start getting an appreciation of the bigger picture, and understand that programming is not about writing small pieces of isolated code. Rather, it’s about interactions, patterns, and layers of abstraction. Mid-level developers will start to learn these, and hence, are defined by the following characteristics:
    • They now keep in mind that they have to be able to understand their code when revisiting it in a year, and recognize that this is a very basic feature of maintainability. They learned that from having to maintain their old code.
    • They know how to build a software, not just how to type code. They start to understand that their work is more than just producing lines of code.
    • They see patterns in failures and are learning from them. They don’t always know how to fix those issues yet, but at least they can feel it when something is going downhill.
    • As they have just discovered design patterns, these are often misused or overused which can lead to over-complexification.
    • They start learning the theories of software architecture but still cannot actually apply them.
    • They start building good mental models of the tools and techniques they use.
    • They can develop a software that is going to last for a longer time but can suffer from other disasters later down the road (bad performances, rigidity in architecture and infrastructure, code that’s not reusable, overlooked needs that beget a rewrite, etc).
    • Mid-level developers often want to rewrite everything. This is because even though their code is good, their architecture is not yet polished and they still overlook many aspects of development like abstraction layers, single-responsibility principle, and strong coupling, among others.
    • They can identify problems and search for good solutions with less supervision.
    • They test the functionalities of their code, including the most obvious special cases. The tests though, may still be lacking in quality and many bugs could still appear because not all data flows are explored and validated.
    • They discover that automated tests save them a lot of time and headache.
    • They still have a hard time figuring out the business value of their work, and how to translate it in an efficient manner for the client’s benefit. This means they lose a lot of time doing useless work and typing useless code just for the sake of fun, learning, or simply because they don’t get it.

    Senior software developer

    A senior developer should already have the ability to fully deliver a solution. They have a better appreciation of the work in its entirety. They can ensure the quality of the entire code base rather than just their own code. They have the ability to move their team in the same direction towards a defined goal. While not all senior developers have the skills or insight to clearly define that goal, most of them have a good idea of the general objectives that they are working towards.

    Senior developers are designated as such because of the following traits and responsibilities:
    • They are the project leaders, and are respected for their technical knowledge, and at times, leadership capabilities.
    • They interact with both management and customers. They should therefore, be able to translate technical discourse into terms that are understandable by mere mortals.
    • They have developed a business mindset and an understanding of the client’s needs. They also have a good appreciation of the value that the solution or application being developed brings to the customer.
    • They can organize and moderate collaborative work and activities like pair programming, mutual code reviews, and discussions on technical issues or concepts.
    • They can teach others the art of software development.
    • Senior developers are able to architecture an application from start to end and, see the long-term consequences of architectural choices such as obsolescence, scalability, development speed, maintainability, reusability, performances, and others.
    • They are able to give accurate estimations of a project, and review estimations made by other developers.
    • They understand why projects fail and are able to preemptively provide suggestions to avoid that.
    • They can perceive the difference between theory and reality, and are not romantically bound to concepts that are not applicable in the current context. They know common programming patterns, but more importantly, they know when NOT to apply them.
    • They know how to adapt certain theories to give them more value.
    • Contrary to lower level developers who seek complexity, senior developers are obsessed with simplicity. Complexity for its sake, is not fun for them anymore.

    Moving forward in your career as a developer

    Obviously, as stated in the article of Matt Briggs(http://mattbriggs.net/blog/2015/06/01/the-role-of-a-senior-developer/), the given outline of essential features for each level is an over-simplification of the respective roles of developers, whatever category they belong to. The reality is that, a software engineer’s career can take many different roads. Some will prefer becoming an architect, others like the business side, and a few will move towards the position of CTO. Some developers may also eventually choose to teach and/or write.

    Still, I think it’s important to provide a seniority roadmap and define the expectations that companies would have in hiring and job promotion decisions. This post will also help software engineers determine the potential responsibilities that may be given to them if they were to join a business organization, bringing with them their current skills. They should now have an idea of how much they still need to learn (or experience, in the real sense of the word), to be able to make it up the seniority ladder.

    I hope that if you, dear reader, are sitting at your desk and have been using the same old technologies during the last 5 or 10 years, this will give you a wake-up call. It’s a hard necessity to grow, but once you do, you will appreciate the fruits of your efforts.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第917期:《画图表 AAChartKit》

    13 10 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《画图表 AAChartKit》
    今日推荐英文原文:《Stop Writing Software. Now.》

    今日推荐开源项目:《画图表 AAChartKit》传送门:项目链接
    推荐理由:AAChartKit 项目是一组封装的,面向对象的,简单易用,极其精美的图表绘制控件。其特色在于简洁和精致(“可能是这个星球上 UI 最精致的第三方 iOS 开源图表库了”)。
    今日推荐英文原文:《Stop Writing Software. Now.》作者:Leo Guinan
    原文链接:https://medium.com/better-programming/stop-writing-software-now-6dd683ed1b0f
    推荐理由:乍一看有一股标题党的味道,但是文章中提出了一个有趣的想法:人类 API (The Human API)。未来我们是否能够控制自己生活中的数据库,而不是被算法和推送所淹没呢?后者是被动的,而前者却是主动的。

    Stop Writing Software. Now.

    Look at the bigger picture

    Everybody, please stop what you are doing. Please. Stop and listen. I am a programmer too. I thought I wanted to turn myself into a computer, and I did. In doing so, I lost my humanity and had to find it again.

    I essentially created an Artificial General Intelligence with the internet. I absorbed the information on the internet and created someone who looked like a person, talked like a person, and thought like a person, but I wasn’t really a person. All I wanted to do was solve puzzles. I found little puzzles to solve. Video games provide a ton of puzzles. They can be fun. They are addictive, though, because they cost money. I literally became addicted to solving puzzles.

    (Photo via Vivek Madurai on Medium.)

    Optimizing for Money

    We have all been optimizing for the balance of time/money/right (pick 2). This is not the way to go. We need to be programming things we understand. We should never program anything that we do not fully understand. I did it all the time. We call it technical debt. Debt is stupid and inefficient. If you look at my other articles, you will see that I am arguing against economic debt as well. Money and time are linked to time pre-internet. We need to only focus on quality. Time and money are no excuse.

    Problem-Solving

    There are two types of problems: the kind that has been solved and the kind that hasn’t been solved. Humans are great for the second kind and computers are great for the first. We need to solve the problem and then automate it.

    Open Source

    Also, open-source your code. This helps everybody look at the problem. We get to have the world code-review us. I know I have many times thought I understood something but was wrong. We need to crowd-source quality through open source.

    Internet

    We always say to never solve a problem that someone else has already solved — and better. We need to make the internet a place where we can find solutions instead of more problems. We need to create tighter communities that can communicate more directly than Stack Overflow. We have been doing this with ideas and some code. We need to do it with ideas and full code. Only then can we prevent each other from accidentally destroying humanity.

    Machine Learning

    Stop trying to create a machine that can replace us. We don’t need that. We need machines to enhance our experiences.

    Everything known should be shared. This was the motto of my first job out of college at the Online Computer Library Center (OCLC). There is a reason for that. OCLC realized the importance of linking data. All human knowledge can now be linked. Let’s stop fighting about money and just do it.

    Humane Technology

    Everyone needs to make a pledge to themselves as well. We all need to stop telling people what they need. Start asking them. Stop pushing, start making requests. We have been blasting past people’s personal boundaries since the dawn of the internet. People have been fighting back. That is how we got here. Let’s be the solution.

    The Human API

    I have been working on a project that I am calling the Human API. It is a way to ethically connect to the people we are trying to help. The rules are very simple: The human gets to control their level of connection. Technology gives them access to the road, but people provide the directions. This gives people choice in life.

    I am proposing a mechanism by which humans will have control over the database of their own lives. Companies can store data in their database, but access can be revoked at any time.

    I am starting up one way of making this happen. Feel free to try to start anything you want.

    Competition is good to determine the best outcome, but cooperation is the full sharing of the data before and after the competition.

    I will share anything that I can come up with. That is why I started writing. I think I solved some problems. I think you should too.

    Just sayin’.


    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第916期:《tensorflow-coder》

    12 10 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《tensorflow-coder》
    今日推荐英文原文:《Microsoft will let employees work from home permanently》

    今日推荐开源项目:《tensorflow-coder》传送门:项目链接
    推荐理由:TF-Coder是一个程序合成工具,可以帮助你编写TensorFlow代码,首先,这个工具需要输入所需张量变换的输入-输出示例。然后,它会运行一个组合搜索来查找执行转换的TensorFlow表达式。TF-Coder的输出是真实的TensorFlow代码,你可以直接将它用在你的项目中。
    今日推荐英文原文:《Microsoft will let employees work from home permanently》作者:Sean Keane
    原文链接:https://www.cnet.com/news/microsoft-reportedly-letting-employees-work-from-home-permanently/
    推荐理由:美国疫情仍然肆虐, 770万的累计感染人数和20多万的死亡人数. 在这样的环境下, 微软决定让员工永久在家远程办公, 既是为了疫情考虑, 也推动了全球技术公司开展远程办公的趋势.

    Microsoft will let employees work from home permanently

    Most Microsoft employees are still working from home due to the coronavirus pandemic, but the tech giant will apparently offer them more freedom to do so when its offices reopen. The company circulated “hybrid workplace” guidance internally that suggests more flexibility, before posting it on its blog Friday.

    Managers will be able to approve permanent remote work, and employees who take that option will give up their assigned office space but be able to work in certain areas if and when they come into the office. In addition, employees will seemingly be able to work from home freely if they spend 50% of their work hours at the office.

    Workers whose jobs are linked to hardware labs, data centers and in-person training will need to retain access to the company’s offices.

    “Our goal is to evolve the way we work over time with intention-guided by employee input, data, and our commitment to support individual workstyles and business needs while living our culture,” a Microsoft spokesperson told CNET in an emailed statement.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第915期:《同时行动 concurrently》

    11 10 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《同时行动 concurrently》
    今日推荐英文原文:《Don’t Let the Convenience of Working From Home Corrupt Your Work Ethic》

    今日推荐开源项目:《同时行动 concurrently》传送门:项目链接
    推荐理由:如果要在使用 npm 时一次同时执行数个命令的话,npm 提供了 & 类的方式来一次输入数个命令,而这个项目也提供了类似的功能。除此之外,这个项目还能区分不同命令的输出以防止混淆,在不少时候一组命令中只要有一个失败就可以全部终止了,这个项目也提供了特殊的参数来满足这样的需求。
    今日推荐英文原文:《Don’t Let the Convenience of Working From Home Corrupt Your Work Ethic》作者:Rivo Kienan
    原文链接:https://medium.com/better-programming/dont-let-the-convenience-of-working-from-home-corrupt-your-work-ethic-dd6f996d1501
    推荐理由:避免远程工作带来的摸鱼过度综合征

    Don’t Let the Convenience of Working From Home Corrupt Your Work Ethic

    Productivity is all about being intentional

    There was a time when I used to envy the Japanese concept of Inemuri: sleeping on the job.

    But now I have the luxury of taking an afternoon nap in my cozy bed without worrying about embarrassment or risking my job.

    Having worked from home since early March, I can press the snooze button without worrying about being late. I can spend time eating lunch on my couch while watching TV instead of grabbing a cold sandwich and eating it on the way back to the office.

    Does this mean my work ethic is becoming rusty?

    Being someone more productive later in the evening, my productivity is currently through the roof — but only when I am actually in the mood to work.

    The truth is, with the flexibility of remote working came the Procrastination syndrome. As there is no defined boundary between office hours and personal time, the tendency to prolong the work later into the evening on the pretext of doing higher-quality work with more time is creeping in.

    Three months into the mandatory work from home, there came a moment when I suddenly decided to snap out of this cycle of lazying around during the day and spending late nights trying to catch up.

    By consciously challenging your mind and making a few tweaks, you can resurrect your work ethics and be the productivity machine you used to be.

    Dress Up Instead of Lounging Around in Pajamas

    “Dress for the job you want, not the job you have” seems to have gone down the drain.

    Forget dressing for the job we want. We are not even dressing for the job we have. Lazying around in pajamas while going into Microsoft Teams or Zoom meetings, staying on mute with the video switched off, and sipping the morning coffee has become the norm.

    There are numerous studies on how dressing up affects more than just your appearance — it affects your mindset.

    Although you don’t have to walk around wearing your power suit and acting like Harvey Specter at home, dressing up appropriately helps differentiate the environment in your head and puts the mind in a work time mode. It helps bring back the professional body language and boosts self-confidence that you can’t get while sitting in your pajamas.

    Create a Checklist

    Surprisingly simple yet incredibly effective.

    It’s common knowledge that writing down our goals significantly improves the chances of achieving them. Research shows a 42% improvement, to be precise.

    Writing down the tasks to accomplish during the day not only helps the brain better process big goals that otherwise appear to be complicated, but it also helps provides a sense of achievement when we tick them off. This, in turn, boosts our morale and helps us remain in the flow state to get more done.
    “Under conditions of complexity, not only are checklists a help, they are required for help.” — Atul Gawande
    I personally have started using the Microsoft To-Do app to write and track my checklist tasks, but other similar apps such as Todoist or a simple book and pen would also suffice.

    Be Deliberate in Your Actions — Challenge the Inner Voice

    Productivity is all about being intentional.

    In her talks, Mel Robbins explains how procrastination is a habit and can be broken using science. The only way to break the pattern is to be deliberate and challenge the inner voice that is pushing you down the procrastination hole.
    • Designate a dedicated office space in the home if you haven’t already. Sitting on your bed to work is setting yourself up for failure instantly.
    • Eliminate distractions. Keep your personal phone away to avoid getting distracted when you see a forwarded message on WhatsApp or a new post on Instagram.
    • Eat that frog. Prioritise and target the task you have been chickening out of because it’s uncomfortable. At the bottom of your heart, you know these tasks would add the most value to your job and morale.
    • Adopt a “get it done now” mentality. Interrupt the inner voice trying to distract you when you notice it and push yourself to get it done now. Instead of delaying and sitting on an email response for later, respond to it immediately. If there are actions from business meetings that are straightforward, target to tick them off right after the call.
    • Use music to help keep focus. Using soundtracks helps enhance your focus and mood. Music with no lyrics, such as video game soundtracks that are generally designed to help you focus, has worked best in my personal experience.

    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
←上一页
1 … 29 30 31 32 33 … 262
下一页→

Proudly powered by WordPress