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

开源日报

  • 开源日报第452期:《韭(jiu)菜的自我修养 the-self-cultivation-of-leeks》

    10 6 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《韭(jiu)菜的自我修养 the-self-cultivation-of-leeks》
    今日推荐英文原文:《Don’t be a one trick pony》

    今日推荐开源项目:《韭(jiu)菜的自我修养 the-self-cultivation-of-leeks》传送门:GitHub链接
    推荐理由:相信不少人对割韭菜这个词都或多或少的在某个地方听过,但是韭菜究竟指的是什么呢?实际上,韭菜这个词是从交易中产生的,而这个项目也介绍了如何去做交易,如何去选择等等,它们并不是只能用在交易上,很多时候这些规律能够应用在几乎任何地方,比如这一条——“自己做决定”。
    今日推荐英文原文:《Don’t be a one trick pony》作者:Alexander Curtis
    原文链接:https://medium.com/@alexc73/dont-be-a-one-trick-pony-7badad9da2d5
    推荐理由:语言和框架终究是一个工具,而你不会希望你的工具箱里只有一个工具的。

    Don’t be a one trick pony

    I recently went to a conference where during one of the talks the speaker said “Some people say Javascript isn’t for Machine Learning. I’m here to tell you that it is….”

    That got me thinking. Why are people so precious about which language can be used for a particular problem? Why focus on the language not the problem? Then I realised — we make a big investment when we learn a programming language, to the point where the language defines us. We think of ourselves as “Javascript developers,” “Java developers,” “Ruby developers.” It is the language, not the methodology nor the problem domain, that forms our identity as devs.

    Imagine if learning a new programming language were trivial. If we could pick it up in half an hour. Then when someone says “Have you heard about this great new Tensor Flow library for machine learning” we don’t immediately think “curse those Python users, I want one in Javascript” we say “wow, let’s have a go!”

    A few years ago recruiters were all on the lookout for “polyglot” developers — people who could program in more than one language. This seems to have waned, perhaps rightly so, but I do think there is great value in knowing several programming languages. Learning even one extra language broadens your horizons.

    For example, if all you know is Javascript :
    1. You identify as a Javascript dev. Other people have their languages but this one is yours. You defend your language.
    2. The problems you solve are limited to JS problems. You probably do lots of web development, and not much embedded programming, for example.
    3. You aren’t seeing the full developer landscape. Did you know that 25% developers use Linux as their primary operating system? It’s installed on their laptops and that’s what they use to surf the web, read emails, write code, run apps. As a web dev you would be forgiven for thinking that everyone uses a Mac. In fact Linux and Mac each have 25% and Windows gets 50% of all devs.
    4. You run the risk of solving problems in a particular way. JS is great for event driven programming but that doesn’t fit every domain (for example writing an installation script in JS is more fiddly than in other languages.) Functional programming is having an influence, but many JS developers are still focused on objects, side effects, and imperative programming, unaware of the troubles they contain. You concentrate on unit tests, but may not have heard of generative testing.
    It’s a pity that many conferences seek to differentiate themselves based on programming language. Several offer the same set of talks, but spun for their particular language. If you are looking for an idea for a talk, try some combination of “How to do (microservices, functional programming, machine learning, $TRENDY_TECHNOLOGY_X) in (Javascript, Ruby, Python, Java, $CONFERENCE_LANGUAGE_Y)”

    Learning a new programming language isn’t difficult, it just takes time, and ideally a non-trivial project to work on to turn theory into practice. I think companies should offer this to their developers as part of their career development. It’s time we concentrated more on good software engineering and less on defending our choice of programming language.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第451期:《Sexy terminals-are-sexy》

    9 6 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《Sexy terminals-are-sexy》
    今日推荐英文原文:《Keep your Ego away from coding》

    今日推荐开源项目:《Sexy terminals-are-sexy》传送门:GitHub链接
    推荐理由:为命令行爱好者准备的资源合集——包括用得上的工具插件以及一些仿命令行的模拟器。相对于命令行来说,初心者似乎更偏向图形界面,但是熟练使用命令行的生产力并不会输给图形界面——最明显的一点就是你不需要把注意力从键盘和屏幕上移开转向鼠标,而诸如使用数据库的时候命令行甚至比图形界面更为优秀,因此学会熟练的操作命令行可以说是增强生产力的必要选择。
    今日推荐英文原文:《Keep your Ego away from coding》作者:Davide de Paolis
    原文链接:https://hackernoon.com/keep-your-ego-away-from-coding-749b41cfc57d
    推荐理由:实际效率比感觉更重要——所以别在一些差不多的选项上浪费所有人的时间,直接拿出数据证明更有效

    Keep your Ego away from coding

    Have you ever been in a meeting where two — or more — devs were arguing about — mostly — irrelevant technical issues?

    Have you ever felt upset after a colleague rejected your Pull Request or criticized your solution during a Code Design session?

    How many endless heated threads have you read in blog posts or StackOverflow questions over this or that better approach?

    If you have been a developer for enough time, you will definitely have experienced all of the above.

    Why? Why are we — as developers — so attached to our code? Why do we have this incessant need to prove ourselves right?
    • Ava or Mocha?
    • React or Vue?
    • Webpack or Parcel
    • Express or Hapi?
    • Visual Studio or Intellij IDEA (or VIM)?
    • AWS SAM or Serverless framework?
    I am not saying that there are no differences. I am saying that most of the time those differences do not make that much difference.

    Some solutions must definitely be evaluated before starting a new project, but this evaluation must be based on data, on the requirements from the client and on the possible limitations from the tool, not on personal preferences or taste.
    Of course previous experience can be decisive in the choice, as costs are ( using IntelliJ requires a license while Visual studio does not; having a team learn a new stack requires time and therefore money)

    Only because you know a tool better does not mean that tool is better than others on the market.

    In the end, the client, or the user does not care if the Web app was built with the latest coolest js tech stack or in .net as long as it works, is fast and it is looking good.

    The problem you solve is more important than the code you write

    Over the years I got more and more detached from some tech decisions. Especially the minor ones regarding which linter, test framework or bundler. The battle is mostly based on opinions.

    It is always conservatives vs hyped — as long as it works and I am good at it, stick to it versus newer is always better.

    I like to try new things and I love to learn always some stuff, but we also have to deliver and we cannot always switch framework, language at every project — wasting time, energy and money.

    This is not that I don’t have discussions over technical topics. I do. Some of them can also become quite heated. But it is never about who is right or wrong.

    Actually, I very like to be proven wrong, because that means that I was making a mistake, or that I could simply do something better and learn something.

    In the end it does not matter who is right, what matter is that the solution is right, whoever it belongs. and it does not even have to be the BEST one.

    The point is:
    • opinions do not matter unless supported by facts and data
    • best is the enemy of good and often what you (and ultimately — the client) need is not the optimal solution, but a solution that suits the requirements and the time/money constraints.
    When there is a tech discussion going on, be it choosing the tech stack for the next project, or a code design session for the next feature, or a code review, put your ego aside.

    The discussion is about the code — the technology and the solution, not about you. it´s not about how cool you are, how expert you are.

    Leave your ego aside, detach emotionally from your creature, embrace change, accept critics, learn from every experience.

    Emotionally detach from your code.

    Being emotionally detached from your code does not mean become sloppy or uninterested in what you do. Don´t emotionally detach from your work.

    Focus on the outcome.

    If you put too much pride in your code poetry, if you think your implementation it´s the only possible solution and that is perfect and therefore you are a good developer and a smart person, of course you will fell attacked — personally attacked if someone criticizes it, or suggests something different. Let alone how you could feel if you are clearly proven wrong.

    If you remain humble and leave ego out of your code, you might just incur into some frustration :
    damn, why didn’t I realize that issue? why did that solution not popped in my mind? I feel ashamed that I have wasted hours or weeks of work, it´s a bit annoying that I have to rework the same stuff over..

    We all went through this. It is OK.

    Conversations are not competitions.

    Just because someone else is right doesn’t mean that you are wrong. An opinion that differs from yours is not an attack on your rightness.

    Sometimes the solution proposed is actually the right one and the best, but it could be advisable to choose a less optimal one if it respects the requisites and way less effort.

    On this matter I changed my mind a lot over the years.

    Before I was one of those devs always fighting for the best design, it had to have all the right design patterns in place, dependency injection, interfaces, it had to be future proof and flexible for future implementations and changes in requirements.

    Then I saw that those further implementations never came or that despite all the complexity and the flexibility, the new requirements often managed to break the design anyway.

    So I slowly moved away from that stance, and embraced a simpler — not easier — approach. Flexible but more focused on what must be now, not on what could be.

    As a good software engineer I try to anticipate issues of course, but I am not obsessing anymore on writing everything super abstract to be ready for future changes.

    Focus on delivering value, not on proving that you are the best

    Fundamentalism is never good, it is not in religion and it is not in tech. Flexibility is more important. You gotta know the rules, and you gotta know when to break them.

    Always remember that code can be modified, code can be improved, code can be deleted.

    You cannot know everything, there is always something you can or have to learn, you are not perfect, there will always be someone better than you. ( and if not. maybe you are in the wrong team, probably you should move on, you should never be the smartest person in the room)

    All this is OK. All this does not lower you. On the contrary, it must be seen as something positive and challenging.
    • Write code with pride but with humility.
    • Put all your passion in your work, but leave your ego out.
    • Be great but be grateful.

    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第450期:《可拓展性 scalable-css-reading-list》

    8 6 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《可拓展性 scalable-css-reading-list》
    今日推荐英文原文:《Chernobyl: The True Cost Of Technical Debt》

    今日推荐开源项目:《可拓展性 scalable-css-reading-list》传送门:GitHub链接
    推荐理由:关于写出具有可拓展性 CSS 的资源合集。可拓展性的 CSS 指的是易于理解和扩展,便于在多人协同工作中使用的 CSS 代码,而这两点在长期发展的项目中都是必不可少的——你或者你的队友迟早会需要补强你写出的旧代码,而到了那时你不会想让你的队友或是你自己对之前写过的东西如何加强无从下手或者手忙脚乱的。
    今日推荐英文原文:《Chernobyl: The True Cost Of Technical Debt》作者:SeattleDataGuy
    原文链接:https://medium.com/better-programming/chernobyl-the-true-cost-of-technical-debt-8307e6f4d53c?source=topic_page—————————20
    推荐理由:切尔诺贝利给技术人员敲响的警钟

    Chernobyl: The True Cost Of Technical Debt

    A comparison of technical debt in the Chernobyl disaster and software development

    HBO’s Chernobyl drew me in instantly. Not just because of the drama or history around the famed incident, it was the way actor Jared Harris (Valery Legasov) approached mitigating the nuclear explosion that was mesmerizing to me. Watching his character mentally engineer a solution with the least risks based on the current assumptions only to run into unforeseeable issues later resonated with my engineering side.
    SPOILER ALERT

    Technical Debt

    More than anything else, Chernobyl is a stark reminder of the true cost of technical debt.

    Technical debt, for those who don’t work in the software world, is the concept that bad design decisions made in code or poorly written code will need to be fixed or will cause future problems. Unlike in the Chernobyl disaster, technical debt is usually invisible in software but can cost companies millions to fix. What drives technical debt is very similar to what was portrayed in the final episode of the mini-series: A combination of bad design decisions due to cost cutting (graphite tips), human error and productivity/business needs.

    For the purpose of this analogy, I will use the term “business needs” to reference the productivity targets that the factories were trying to meet.

    Cost Cutting

    In the case of Chernobyl, the technical debt started with the graphite tips of the control rods. The control rods were made of boron, which helped slow the reaction rate in the nuclear reactor. However, the tips of these control rods were actually graphite which increases the reaction rate. So, when the engineer went to slow the rate of the core’s reaction by pressing the emergency shut off switch, the rods got stuck with just the tips in the reactor and the reactor exploded.

    The graphite tips were not revealed as the straw that broke the camels back until the final episode. In the mini-series, the moment Valery mentions the graphite tips the prosecutor asks, “Why graphite?”, to which Valery responds in short “because it is cheaper”.

    The graphite tips were the physical manifestation of a programmer deciding to not write robust code and failing to consider how future engineers will interact with the code. It was a short-cut that the Soviet Union used to save money at the time which led to one of the worst disasters of all time.

    In the end, they did not account for the number of mistakes that the engineers of Chernobyl would make that would place nuclear reactor #4 in a situation where it would explode.

    Human Error

    Technical debt does not often surface in the normal day-to-day use of software, just as it wasn’t revealed in the standard use of the Chernobyl nuclear reactor.

    More than likely, similar to software, the engineers designed the reactor to handle 95% of the possible scenarios that it would be placed in. We often reference these scenarios as use cases.

    The uses cases that aren’t in that 95% are called edge cases. These are typically scenarios that seem rare, shouldn’t happen or are caused by user-error instead of system error.

    Yet, because of how complex these systems are you can never really foresee every possible scenario. Predicting every edge case is impossible to do.

    Based on the show (as I am not a nuclear engineer), I assume no one thought that someone would first poison the nuclear reactor with xenon which would cause it to stall and then try bringing it up to power again without putting the rods back in.

    And then…to make matters worse…have the graphite tips of the control rod get stuck causing an increase rather than a decrease of nuclear reactivity.

    Perfect engineering accounts for every possible scenario, it accounts for every possible human error and ensures that the users are steered in the right direction. But, there is no such thing as perfect engineering. We make assumptions, we focus on the majority of use cases and are pushed by deadlines. All this being said, the nuclear reactor would have never been in said position without pressure from upper management to meet productivity quotas.

    Business Needs

    Although dramatized, the final episode depicts the directors fantasizing about being promoted because of their successful test of reactor number 4. When they get the call to stall the test for a few hours, they conclude that it will be safe.

    Did they conclude it was safe because they thought through the process of stalling the test for 10 hours or did they want to keep their superiors happy? I won’t presume to know, but I can say I have seen the need to meet deadlines or quarterly budgets force decisions that affect short term goals but eventually cause long term problems.

    The push to meet short term goals like monthly quotas and quarterly forecasts often force management to game the system. They will focus on just meeting the current needs or demands without considering what might happen later on. For example, perhaps an engineering manager pushes his or her team to not include a security module of code because it doesn’t impact the functionality and it will look good on them. They might be tempted to do so even if they know it is wrong. After all, once they are promoted, it is someone else’s problem.

    You’ll Always Have That One Engineer

    I enjoyed the engineer speaking out in the final episode. The truth is there is always one good engineer who attempts to stop bad practices from occurring. They are not worried about the bottom line and are not worried about speaking up to management to let them know they are making an error. These recommendations can be passed over, put into the “fix it later” category (which means never), or just ignoring it altogether.

    Honestly, we need to thank these people in every company.

    These are the only people sitting between us and planes falling from the sky or our banking systems going on the fritz. Their discipline for good QA and integration testing is what ensures we don’t die.

    Conclusion

    Chernobyl is the physical embodiment of technical debt in the software world. It can be hard to see the impact technical debt has on a company because it is invisible. Oftentimes, it won’t strike until the original engineers that developed the systems are long gone.

    This doesn’t make it any less real.

    This HBO show speaks to a concern I have as software becomes integrated into everything.

    What kind of technical debt is being laced into our cars and planes as we further try to integrate machine learning and AI into everything?

    With the sheer complexity of managing IoT devices, what are the chances engineers won’t make a mistake?

    What edge cases are we failing to capture? How are tight deadlines and bombastic CEOs forcing their engineers to make short term decisions in order to make sure they get their code shipped on time?

    Companies attempt to pretend they are driven by higher mission statements, but at the end of the day, they are driven by the same productivity metrics that acted as a catalyst for the disaster at Chernobyl.

    “Every lie we tell incurs a debt to the truth. Sooner or later that debt must be paid.” The brilliant, peerless Chernobyl. — @Baddiel david baddiel

    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第449期:《漫画创作 comicgen》

    7 6 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《漫画创作 comicgen》
    今日推荐英文原文:《Why Codeless Software is Doomed to Fail》

    今日推荐开源项目:《漫画创作 comicgen》传送门:GitHub链接
    推荐理由:一个在让你能网页上创作漫画的项目,只需要组合那些图片,之后加上自己写的台词。这个项目提供了不同人物的不同姿势和表情,将它们和你独特的故事组合起来,就能够成为一个自己创作的漫画(即使你并不会画画),展现出来的效果大概像这样:

    今日推荐英文原文:《Why Codeless Software is Doomed to Fail》作者:Wessel Badenhorst
    原文链接:https://medium.com/@Wessel/why-codeless-software-is-doomed-to-fail-80871ca3ea07
    推荐理由:能不写太多代码而是直接图形界面完成的应用程序没办法像普通写出的应用程序一样灵活而容易自定义,这导致让图形界面实现复杂的程序变得困难

    Why Codeless Software is Doomed to Fail

    Every couple of years, the hope surfaces that a simple graphical interface will replace teams of developers. Business people to quickly and easily create beautiful expressions of their ideas and launch them into production seamlessly. A handful of startups in every generation take up this challenge, and they mostly fail.

    Why do people keep trying to breathe life into a solution that is so obviously doomed to fail is an interesting question, but a more useful question would be why is it doomed to fail, and what are the alternatives.

    The reason why companies keep trying to create canvas driven development tools has 2 components. The first is that as a software engineer, you learn to map out your ideas in some visual representation. These simple flow charts, UML diagrams, or high fidelity mockups then have to be translated to code that a computer can interpret. During the design phase the process feels really smooth, you clarify your thoughts and produce a lot of value in a relatively short amount of time, if only the actual coding could be this frictionless. The second reason is that working with developers can be frustrating. Business people often have to contend with neverending lists of constraints in terms of what the “system” can and cannot do, or constant excuses for why deadlines were not met because of some unforeseen technical difficulty. Surely there has to be a better way. Where these two motivations meet, a business idea is born: “Let’s create a tool that makes building software as easy as drawing up a flow diagram!”

    At first glance, the idea has merit. There are more than enough examples of tasks that used to be really hard, but today are simple. One such example is the task of building a website. A little more than 12 years ago, building and hosting a website was a serious undertaking, costing thousands, and requiring many experts. Even small text changes took weeks and were a costly undertaking. Today you can spin up a beautifully designed website in a matter of minutes. A little further back in time you would have been very well paid if you were skilled at using spreadsheet software, a skill that has become a requirement for most entry-level office jobs.

    If this trend holds, and it seems like it does, pretty soon even a regular high school kid should be able to build the next Netflix using nothing more than an easy “click and drag” interface.

    This is the promise low-code platforms are built on. In every pitch to investors or potential business clients, the inevitability of codeless production products is pushed. These businesses mostly start out with some simple flow diagram based interface that lets you string the flow of data or user interactions together. Small blocks representing data sources can be dropped onto the canvas and connected to the software. Then, in theory, you can just press a button and your app, report, or tool is generated. See it just works!

    At this point, the interface business has the client excited and ready to begin replacing all their expensive software engineers with business analysts who are experts at mapping business flow.

    There are, however, two missing pieces that are conveniently left out, or overlooked. The examples of applications that left the domain of software engineers are very specific application. The Wix website does not make for a great backend for an analytics app, and Excel is a really poor database. It is precisely where you move outside of the parts that came in the box that you run into trouble. Suddenly there is not a box to just drop in to connect to your phone’s accelerometer and detect and unnatural movement. Your low-code provider either informs you that their tool was not made for your specific use-case, or you are told that you will have to build your custom functionality yourself, using their very friendly scripting language. The other missing piece is the fact that the visual diagram is a gross simplification of the actual solution. It pays no mind to the things that can go wrong or all the little details that are captured by a simple line. Once again these details need to be clearly expressed in a way that is accurate and unambiguous.

    Suddenly you find yourself looking for programmers who are well versed in the specific low-code platform that you bought, and it is a really hard task.

    The reality is that whenever you are building software with any level of custom functionality, as in it does not come in the box, you are going to need people who are comfortable writing code. These individuals are more comfortable writing code in code, and not in some code-picture hybrid. This is why low-code is bound to fail, the moment you need to create something in a domain that does not fit existing tools, you are already into the domain where you will eventually need programming done, and in that domain, you need a programming language, not a drawing tool.

    What is the alternative?

    Since the beginning of the computer age, we have seen a steady progression in the way in which we communicate with computers, from the binary programs written on punchcards to the explosion of modern programming languages like Python, Elixer, and Rust. What is happening is that the languages themselves are becoming more expression and more abstract. What this means is that the distance between an idea and the code you need to write is shrinking and that you need less and less code to express these ideas.

    Programming, coding, or software engineering is and will remain the art of expressing complex ideas as clearly and completely unambiguously. It is firstly, coming up with these ideas, and secondly, this expression, that makes software projects hard to estimate and often expensive to complete.

    Yes in future businesses will require fewer people to achieve the same results, but as we have learned from the productivity field, the moment you are able to do more, the amount that you wish to do explodes to match your newfound capacity. Your increase in output is also matched by your competitors, and you need to move as fast as you can just to remain relevant.

    Rather than spend time on a Quixotic adventure in low code, find a dozen good software engineers, and free them to use the most expensive tools available. You will save yourself months of pain, and avoid a costly rewrite, the inevitable end of every low-code project
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
←上一页
1 … 146 147 148 149 150 … 262
下一页→

Proudly powered by WordPress