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

开源日报

  • 开源日报第488期:《自制表情包 Meme-generator》

    16 7 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《自制表情包 Meme-generator》
    今日推荐英文原文:《Communication Skills: A Core Part of Software Engineering》

    今日推荐开源项目:《自制表情包 Meme-generator》传送门:GitHub链接
    推荐理由:兴许有的时候现有的表情包并不能很好的契合沙雕群友的各种奇葩情景,这个时候就需要可以自定义的表情生成功能了。这个动图生成器可以让你自定义想要写入各种已经变成梗的动图中的句子,包括真香和有钱真的是为所欲为等,在关键时刻可以让你不至于陷入无图可用的窘境中。

    今日推荐英文原文:《Communication Skills: A Core Part of Software Engineering》作者:mayuko
    原文链接:https://medium.com/better-programming/communication-skills-a-core-part-of-software-engineering-c7d379cebd66
    推荐理由:在工作中交流是不可避免的,同样也是极其重要的

    Communication Skills: A Core Part of Software Engineering

    Developing the skills tech companies look for

    Communication skills. They come into play when writing documentation for frameworks and libraries, or when sending emails or slack messages to coworkers. They’re an important factor in how two or more people convey complex ideas and concepts to each other, which is core to collaborating as a software developer. And, more recently, communication skills have become an important part of software developer interviews, where most companies will check for a level of aptitude in a candidate’s communication skills.

    But we throw communication in the soft skills category, where it lives as a second class citizen to the more dignified technical skills. Maybe it’s the name soft skills that gives it that feeling of being lesser-than, but communication skills are sometimes simply considered as nice to have. However, it is an imperative skill for a successful career in tech, as the need to communicate more complex ideas to a wider group of people becomes an increasingly important part of the job. It’s also an important factor for making the tech industry more inclusive by enabling people from different backgrounds to work well with each other on projects.

    When we look at software development, we talk a lot about the amazing inventions and technologies that will move our global society one step further. But in reality, it’s people, real people — not machines, algorithms, or robots — who decide what gets built, how it gets built, and when and where it gets into the hands of people who’ll use it. There’s a very human aspect to software engineering, so in a big sense, software development requires very human skills in order to do the best job. So, it’s only natural that, in a highly detailed and skilled job like software development, communication is key.

    Today I wanted to discuss three major steps and concepts that can help level up your communication skills:
    1. Start by working on your listening skills
    2. Express your ideas through public speaking
    3. Always strive to empathize with others
    These steps set up a great foundation for communicating effectively with other people. They have all been important themes in my own software engineering career, and I believe these steps really helped to level up my communication skills early on.

    Start With Listening

    The first step in becoming a great communicator is to be a great listener.

    As software engineers, we know that, when solving a problem, we need to gather as much information as possible in order to come up with the best solution and make the best decision. It turns out that this is a great practice for solving and for communicating, too. That’s because great communication happens when all parties reaches a point of mutual understanding.

    We all communicate in vastly different ways. If you ask two people how to describe a technical concept, it’s likely that they’ll use very different sets of words to explain the same thing. A ton of things factor into how different people communicate with each other — different languages, upbringing, hometowns, etc.

    But in a highly technical job like software engineering, it makes a huge difference to reach a mutual understanding. Differences in understanding of the implementation can lead to errors and bugs, extended project timelines, and disappointment from unmet expectations.

    In order to reach a mutual understanding, it’s important to both convey your own thoughts and to fully listen to another person’s. We often don’t talk about listening skills being a part of communication in tech, so today I have three methods on how to be a better listener:

    1. Playback.

    This is when you hear someone’s words, pause, and then play back to them what you thought they said in your own words. This creates an opportunity for yourself to ingest and present your own interpretation of someone’s meaning, and also creates a chance for the other person to correct your understanding in case it’s misaligned. Here’s an example:

    Person 1: So how long do you think the project is going to take?

    Person 2: Well, the back end is gonna take maybe like three days to make, and there’s also a dependency with another team, so maybe another two days too. The UI will take about six days right now given my estimates, and I’m also still waiting on them to finish up.

    Person 1: (Playback) So it sounds like it’ll take about nine days at least, depending on other people and teams?

    Person 2: That’s right!

    The important part here is when Person 1 says “it sounds like” — and they say what they understood in their own words.

    2. Allow other people to finish their thoughts before adding yours.

    When having a conversation with someone, make sure to give them time to say everything they need before adding on to the conversation. If you have a question or idea, they might answer your question or get to the idea before you interject. It’s also impolite to cut someone off and can lead to poorly managed relationships with coworkers.

    3. Use positive body language.

    There’s a really big difference in the experience of talking to someone who is physically engaged versus physically disengaged in a conversation.

    Showing engagement signals interest in the topic and leads way to a more productive and enthusiastic conversation. Ways to use positive body language include: a comfortable amount of eye contact, good posture, using hand gestures while speaking, and focusing on the conversation (e.g. don’t use your phone or while talking to someone).

    These are all great ways to level up your listening skills — this will enable you to communicate effectively with people you work with on your team and at your company. But a big part of software engineering is also public speaking — this is not just limited to meetups and conferences, but also come to play within your company and team as well.

    Express Your Ideas With Public Speaking

    Public speaking is an important skill to work on as a software engineer. It’s one of the common ways that software engineers express ideas, whether that be in product demos, architectural overviews, or even standup updates where you’re talking to multiple people at once. It’s also worth noting that the more you advance in your career, the more public speaking you’re likely to encounter as your audience widens to more people and the scope of your work increases in size and complexity.

    When working on your public speaking, it’s helpful to first visualize what a great example of public speaking looks like. Especially for technical talks, it’s usually characterized by:
    • Great eye contact with the audience
    • Talking at a volume where everyone can hear
    • Not using crutch words like “um” or “uh” or “so”
    • Using engaging gestures and body movements
    • Speaking concisely.
    This is obviously a lot to think about while speaking, so the most important thing you can do to get better at public speaking is to practice. Practice, practice, practice.

    Taking an iterative approach to improving these skills enables you to start early and quickly and correct the mistakes that you make along the way. So, practice giving your speech or talk before you actually need to deliver it. Here are some tips to practice purposefully:
    • Practice your speech in its entirety — don’t rush through it, and deliver it as you plan to later on.
    • Practice delivering it in different settings: at home, at work, and most importantly, in the room (or a similar one) where you’ll be presenting.
    • Have someone you trust to listen to your speech. Ask them for their honest feedback on what you could do better in each of the categories listed above, so that you can correct your behavior for next time.
    • Practice a lot. The more you practice and catch yourself making these mistakes, the better you’ll get in no time.
    Next, we’ll move on to an underlying theme that greatly improves communication in tech: Empathy.

    Always Lead With Empathy When Communicating

    Empathy is the act of putting yourself in someone else’s shoes to try to understand their feelings and ideas.

    It’s a core part of the software engineering job because the stuff you’re making is for other people. You need to understand their needs about how they’ll use a product so that you can make a better product.

    And, you’re making this stuff with other people. You’ll work with people in so many different roles — product managers, designers, data scientists, managers, other software engineers. And, all of them will be individually unique in how they communicate.

    Putting yourself in their shoes will help you understand how to effectively communicate with them so that you can reach mutual understanding.

    So, how do you get better at empathy? I think that it’s a combination of being a great listener and establishing strong relationships with the people around you. Learning about other people’s backgrounds, their motivations, and their passions will help you to see the bigger picture of what makes that person unique. Understanding where a person is coming from helps you to shift your communication style accordingly.

    For example, if someone is new to your company, you’ll know to explain acronyms that are commonly used internally, since they probably don’t know them yet. Alternatively, if you’re talking to someone whose role doesn’t require a technical background, it could be important to use easy-to-understand technical terms, or to explain those concepts as you go so that they can be on the same page as you.

    Using empathy in communication doesn’t mean that you have to be judgmental — it means the opposite. It’s counterproductive to judge someone for what they know and what they don’t know . Helping each other get to a common understanding by using common language is a key ingredient in successful communication.

    All of these skills — listening, public speaking, and empathy — can ultimately help you and others reach common ground and mutual understanding about ideas, thoughts, and work. This is the most important thing about communication.

    As a tech community, we really shouldn’t discount these skills — they help move projects, companies, and organizations forward. It’s an important skill to look for in software engineering interviews and should be an expectation of people in technical roles. Because when software engineers communicate effectively together, great things happen — great things get built!
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第487期:《做中学 Swift-30-Projects》

    15 7 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《做中学 Swift-30-Projects》
    今日推荐英文原文:《What Programmers Can Learn From Rappers》

    今日推荐开源项目:《做中学 Swift-30-Projects》传送门:GitHub链接
    推荐理由:一些使用 Swift 编写的应用。提高熟练度最好的方法就是实践,这个项目并非只是按着教程上说的去写代码,就像其他 GitHub 项目一样,它使用另一个项目中提到的 Swift 代码风格(传送门),而且有着容易理解的结构。而这些在自己动手和团队合作中都是不可或缺的,实践的重要之处正体现于此。
    今日推荐英文原文:《What Programmers Can Learn From Rappers》作者:Jake Z.
    原文链接:https://medium.com/@jacobjzhang/what-programmers-can-learn-from-rappers-d90c3c89fb25
    推荐理由:这两个八竿子打不着的职业究竟能有什么联系?最起码看到这篇文章之前我还真没想出……

    What Programmers Can Learn From Rappers

    I was fortunate enough to grow up in Queens, New York, which contains many of the literal most diverse zip codes in the world.

    This meant that growing up, I was exposed to a lot. Obviously I experienced Chinese language, culture, and cooking at home — but I also went to school, church, and played basketball with the local Irish, Filipino, and Puerto Rican kids. Then I went to Bronx Science and saw the dichotomy between its adolescent culture and what the rest of the neighboring Bronx schools had to offer, before attending CUNY and Fordham and seeing two completely different socioeconomic levels.

    All that’s to say, my background is pretty eye opening for most people around the world, though it’s pretty common to New Yorkers. These experiences were also what introduced me to perhaps two of my favorite loves in the world — computer programming and rap music.

    Though they seem completely unrelated at first, they do share some commonalities. Otherwise this video of Nipsey Hussle investing in cryptocurrency(https://youtu.be/TwB7XH7JUns) wouldn’t be as captivating as it is.

    And of course, you wouldn’t have Ben Horowitz quoting rap legends in the beginning of every chapter of his book.

    What could they possibly share in common then? It’s firstly the endgame: programmers and rappers want the same things:
    • A sense of “making it”, from either getting signed to a deal or joining a public software company
    • Status, from either Platinum albums or Twitter/Github mentions
    • Influence in their small circles (e.g. BET Hip Hop Awards, MET GALA, etc. versus tech conferences )
    And what’s the most interesting commonality?

    Both professions are writers, simply using different mediums to express their thoughts.

    Computer programming and software development is literally taking the knowledge and solution in one’s head, and expressing it in symbols that a machine can understand.

    Rhymes and bars are poetic memoirs of one’s current state of mind.

    They also share a need for a flow state. When Kendrick Lamar wrote “Bitch Don’t Kill My Vibe”, he was talking about being in a frame of mind where he could innovate, create, and harness his mental powers without distraction. If you’re a developer, you know exactly what I’m talking about here.

    Since most of you reading this will be programmers (hello to the few rappers reading this blog), I think it would be interesting to explore some things that software engineers can learn from hip hop artists.

    Requirements, Winning, Copycats

    You gon’ have to pay the price if you get wishy-washy / This a Tallageda Night, I think I’m Ricky Bobby / My advice quit the music, get the different hobby / All you ***** sound the same, just a different copy — Joyner Lucas, Broke and Stupid

    These bars are underrated as hell, bro. So many gems here.

    Without clear requirements, “wishy washy” asks are going to lead to failures of projects. They are also, indeed, usually very costly — so make sure that you know exactly what you’re trying to build before starting to code.

    Secondly, Ricky Bobby in Tallageda Nights was all about winning initially. However, winning (and trying to be the “rockstar developer”) got him in a world of hurt and trouble. You ultimately have to realize software is a team sport, and that ninjas/rockstars/superstars hurt morale instead of boosting it.

    The last two lines are especially true for developers who identify as IndieHackers. You don’t want to be a copycat. AlgoDaily is not like any other interviewing site — it is meant to be the ultimate remix, and serve as a career coach, habit tracker, and community combined into one simple platform. If you “sound the same” as a rapper or developer, go find yourself a niche that you can excel in.

    Career Advice From Kendrick

    I was born like this, since one like this, immaculate conception / I transform like this, perform like this, was Yeshua’s new weapon / I don’t contemplate, I meditate, then off your fucking head / This that put-the-kids-to-bed, this that / I got, I got, I got, I got / Realness, I just kill shit / ’Cause it’s in my DNA — Kendrick Lamar, DNA

    Kendrick drops a lot of hidden gems in his bars, but this is one of my favorite. What he’s saying here is for top performance, you need to be at 0 or 100, but never in the middle.

    That is, you either need to be meditating, or kicking ass. You need to be putting kids to bed, or killing shit.

    This is because software engineering is not just a mental game, but a physical one — long hours slouched in front of a screen wreck your body. If you want to really attain peak performance at all times, you need to be willing to be an absolute bum sometimes.

    Yishan Wong, former CEO of Reddit, has written about this before:

    Exceptional focus does not mean that you are able to work during all your waking hours. During your “downtime” (time when you are not being productive but also not sleeping), don’t try to work on lower-priority projects. Instead, make sure you are goofing off. The most focused people maintain focus over long periods of time (months, years) rather than working obsessively on something over entire days (which is likely to lead to burnout), so make sure your daily schedule involves breaks where you deliberately don’t do anything productive. The idea here is to not fatigue your mind with focus, but to continually “re-attract” it back to the thing you want to focus on.

    This is why AlgoDaily advocates just one problem a day. Not two, or five, but ONE. One a day gives you the rest of the day to do whatever you want.

    You know this’ll never be a tie, just look at they laces / You know careers take off, just gotta be patient.

    These words came from Kendrick Lamar.

    Yep, that Kendrick Lamar. The man behind HiiiPoWeR, Swimming Pools, Humble, and many more huge hits. If there’s one guy who can lay a claim to king of the rap game, it’s him.

    But did you know he started rapping and making music at just 8 years old? It was when he witnessed Tupac and Dr. Dre film California Love. From then on, he knew exactly what he wanted to do.

    He didn’t achieve commercial success, however, until Section.80 came out in 2011 — meaning he had to hone his craft for 16 years before blowing up.

    Careers take time, but don’t worry. Your competition is rarely as prepared as you, provided you do just a little bit each day — because ultimately, the average person does zilch to improve upon their standing in life.

    New Developers Are Trying Their best

    I’m just a man of the people, not above but equal / And for the greater good I walk amongst the evil / Don’t cry, Mama, this the life I choose myself / Just pray along the way that I don’t lose myself / This is for the ***** that said that Hip-Hop was dead / I went to Hell to resurrect it / How could you fail to respect it? — J. Cole, Let Nas Down

    Look, Javascript was my first programming language, and it doesn’t feel great when older developers trash the Javascript ecosystem.

    Yes, there are some libraries written that aren’t up to par for production use, and it seems like there’s a new framework every few days — but to new developers, as J. Cole says, “for the greater good I walk amongst the evil”.

    This is the environment that new developers are coming into — the world where programming mostly happens in, or for, browsers. As a result, the average “not above but equal” developer is coming into a terribly chaotic world and trying to make sense, and their dent, in it. It’s not easy.

    So give the new wave of developers some respect. They are coming into a web full of unlimited possiblities, but very little guidance (many are now self taught through sites like this), to make things. That is difficult, and bad works will happen, but great things are coming out of it too. And that’s progress.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第486期:《测试驱动 learn-go-with-tests》

    14 7 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《测试驱动 learn-go-with-tests》
    今日推荐英文原文:《What Is Machine Learning?》

    今日推荐开源项目:《测试驱动 learn-go-with-tests》传送门:GitHub链接
    推荐理由:TDD 即测试驱动开发,即先编写测试用代码,然后让功能代码通过测试来不断前进的开发方法。这个项目就是使用 TDD 的方法来学习 Go 语言的教程,即不断的使用示例来帮助理解学习,而且对于熟悉 Go 内置的测试功能很有帮助。虽然总有一天测试代码会变的比功能代码都要多而且几乎不能真的拿来使用,但是在你不小心碰坏这个巨大积木塔的某一处时它们就会马上发现并指出来,在这层意义上多熟悉测试功能来写几个测试是没有坏处的。
    今日推荐英文原文:《What Is Machine Learning?》作者:PCMag
    原文链接:https://medium.com/pcmag-access/what-is-machine-learning-3c5f551f28c8
    推荐理由:别忘了人工智能和机器学习并不是同一种东西

    What Is Machine Learning?

    Although it’s far from the original vision of artificial intelligence, machine learning has brought us much closer to the ultimate goal of creating thinking machines. Here’s how it works.

    By Ben Dickson

    In December 2017, DeepMind, the research lab acquired by Google in 2014, introduced AlphaZero, an artificial intelligence program that could defeat world champions at several board games.

    Interestingly, AlphaZero received zero instructions from humans on how to play the games (hence the name). Instead, it used machine learning, a branch of AI that develops its behavior through experience instead of explicit commands.

    Within 24 hours, AlphaZero achieved superhuman performance in chess and defeated the previous world-champion chess program. Shortly after, AlphaZero’s machine-learning algorithm also mastered Shogi (Japanese chess) and the Chinese board game Go, and it defeated its predecessor, AlphaGo, 100 to zero.

    Machine learning has become popular in recent years and is helping computers solve problems previously thought to be the exclusive domain of human intelligence. And even though it’s still a far shot from the original vision of artificial intelligence, machine learning has gotten us much closer to the ultimate goal of creating thinking machines.

    What’s the Difference Between Artificial Intelligence and Machine Learning?

    Traditional approaches to developing artificial intelligence involve meticulously coding all the rules and knowledge that define an AI agent’s behavior. When creating rule-based AI, developers must write instructions that specify how the AI should behave in response to every possible situation. This rule-based approach, also known as good old-fashioned AI (GOFAI) or symbolic AI, tries to mimic the human mind’s reasoning and knowledge representation functions.

    A perfect example of symbolic AI is Stockfish, a top-ranking, open-source chess engine more than 10 years in the making. Hundreds of programmers and chess players have contributed to Stockfish and helped develop its logic by coding its rules-for example, what the AI should do when the opponent moves its knight from B1 to C3.

    But rule-based AI often breaks when dealing with situations where the rules are too complex and implicit. Recognizing speech and objects in images, for instance, are advanced operations that can’t be expressed in logical rules.

    As opposed to symbolic AI, machine-learning AI models are developed not by writing rules but by gathering examples. For instance, to create a machine learning-based chess engine, a developer creates a base algorithm and then “trains” it with data from thousands of previously played chess games. By analyzing the data, the AI finds common patterns that define winning strategies, which it can use to defeat real opponents.

    The more games the AI reviews, the better it becomes at predicting winning moves during play. This is why machine learning is defined as a program whose performance improves with experience.

    Machine learning is applicable to many real-world tasks, including image classification, voice recognition, content recommendation, fraud detection, and natural language processing.

    Supervised and Unsupervised Learning

    Depending on the problem they want to solve, developers prepare relevant data to build their machine-learning model. For instance, if they wanted to use machine learning to detect fraudulent bank transactions, developers would compile a list of existing transactions and label them with their outcome (fraudulent or valid). When they feed the data to the algorithm, it separates the fraudulent and valid transactions and finds the common characteristics within each of the two classes. The process of training models with annotated data is called “supervised learning” and is currently the dominant form of machine learning.

    Many online repositories of labeled data for different tasks already exist. Some popular examples are ImageNet, an open-source dataset of more than 14 million labeled images, and MNIST, a dataset of 60,000 labeled handwritten digits. Machine-learning developers also use platforms such as Amazon’s Mechanical Turk, an online, on-demand hiring hub for performing cognitive tasks such as labeling images and audio samples. And a growing sector of startups specialize in data annotation.

    But not all problems require labeled data. Some machine-learning problems can be solved through “unsupervised learning,” where you provide the AI model with raw data and let it figure out for itself which patterns are relevant.

    A common use of unsupervised learning is anomaly detection. For instance, a machine-learning algorithm can train on the raw network-traffic data of an internet-connected device-say, a smart fridge. After training, the AI establishes a baseline for the device and can flag outlier behavior. If the device becomes infected with malware and starts communicating with malicious servers, the machine-learning model will be able to detect it, because the network traffic is different from the normal behavior observed during training.

    Reinforcement Learning

    By now, you probably know that quality training data plays a huge role in the efficiency of machine learning models. But reinforcement learning is a specialized type of machine learning in which an AI develops its behavior without using previous data.

    Reinforcement-learning models start with a clean slate. They’re instructed only on their environment’s basic rules and the task at hand. Through trial and error, they learn to optimize their actions for their goals.

    DeepMind’s AlphaZero is an interesting example of reinforcement learning. As opposed to other machine-learning models, which must see how humans play chess and learn from them, AlphaZero started only knowing the pieces’ moves and the game’s win conditions. After that, it played millions of matches against itself, starting with random actions and gradually developing behavioral patterns.

    Reinforcement learning is a hot area of research. It’s the main technology used to develop AI models that can master complex games such as Dota 2 and StarCraft 2 and is also used to solve real-life problems such as managing data center resources and creating robotic hands that can handle objects with human-like dexterity.

    Deep Learning

    Deep learning is another popular subset of machine learning. It uses artificial neural networks, software constructions that are roughly inspired by the biological structure of the human brain.

    Neural networks excel at processing unstructured data such as images, video, audio, and long excerpts of text such as articles and research papers. Before deep learning, machine-learning experts had to put a lot of effort into extracting features from images and videos and would run their algorithms on top of that. Neural networks automatically detect those features without requiring much effort from human engineers.

    Deep learning is behind many modern AI technologies such as driverless cars, advanced translation systems, and the facial-recognition tech in your iPhone X.

    The Limits of Machine Learning

    People often confuse machine learning with human-level artificial intelligence, and the marketing departments of some companies intentionally use the terms interchangeably. But while machine learning has taken great strides toward solving complex problems, it is still very far from creating the thinking machines envisioned by the pioneers of AI.

    In addition to learning from experience, true intelligence requires reasoning, common sense, and abstract thinking-areas in which machine learning models perform very poorly.

    For instance, while machine learning is good at complicated pattern-recognition tasks such as predicting breast cancer five years in advance, it struggles with simpler logic and reasoning tasks such as solving high-school math problems.

    Machine learning’s lack of reasoning power makes it bad at generalizing its knowledge. For instance, a machine-learning agent that can play Super Mario 3 like a pro won’t dominate another platform game, such as Mega Man, or even another version of Super Mario. It would need to be trained from scratch.

    Without the power to extract conceptual knowledge from experience, machine-learning models require tons of training data to perform. Unfortunately, many domains lack sufficient training data or don’t have the funds to acquire more. Deep learning, which is now the prevalent form of machine learning, also suffers from an explainability problem: Neural networks work in complicated ways, and even their creators struggle to follow their decision-making processes. This makes it difficult to use the power of neural networks in settings where there’s a legal requirement to explain AI decisions.

    Fortunately, efforts are being made to overcome machine learning’s limits. One notable example is a widespread initiative by DARPA, the Department of Defense’s research arm, to create explainable AI models.

    Other projects aim to reduce machine learning’s over-reliance on annotated data and make the technology accessible to domains with limited training data. Researchers at IBM and MIT recently made inroads in the field by combining symbolic AI with neural networks. Hybrid AI models require less data for training and can provide step-by-step explanations of their decisions.

    Whether the evolution of machine learning will eventually help us reach the ever-elusive goal of creating human-level AI remains to be seen. But what we know for sure is that thanks to advances in machine learning, the devices sitting on our desks and resting in our pockets are getting smarter every day.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第485期:《先想好再动手 design-patterns-for-humans》

    13 7 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《先想好再动手 design-patterns-for-humans》
    今日推荐英文原文:《Front End Developers Need to Diversify Into Design》

    今日推荐开源项目:《先想好再动手 design-patterns-for-humans》传送门:GitHub链接
    推荐理由:设计一个看上去相同的软件实际上有很多种方法,而选择正确的方法设计它将会事半功倍。这个项目通过一些现实世界和代码的例子讲解设计方法,从而让人更容易理解。除非这个项目不需要长期使用而是一时解决问题的简单方案,不然选择合适的方法设计它将会在未来做出改动时节省宝贵的时间——特别是在诸如为了偷懒用面向过程的方法解决了面向对象问题这种完全走偏路线的时候,最差的情况就是得完全推倒重来。
    今日推荐英文原文:《Front End Developers Need to Diversify Into Design》作者:Aphinya Dechalert
    原文链接:https://medium.com/better-programming/why-front-end-developers-need-to-diversify-into-design-e51e72eb7136
    推荐理由:对于前端开发者来说,设计是避不开的,有时还需要自己动手

    Front End Developers Need to Diversify Into Design

    There’s more to it than just code, code, and more code

    Front end development is a weird, special little space in programming. To be a truly effective and efficient front end engineer, there needs to be a balanced relationship between the creative and analytic sides of the brain.

    Visual arts creativity and imagination are skills that are often lost when we hit high school. Despite dealing with code all day, front end developers still need to rely on these skills from time to time — even when we don’t want to. Not every company comes up with complete wire frames or drill down mock ups of what a particular page may look like for a multitude of devices. As a result, the front end developer is often left to fill in the visual gaps, sometimes making executive design designs because the product needs to get done.

    It happens and it happens a lot.

    Even if you have everything visually delivered to you with clear specifications and expectations, having design knowledge is a handy part of your front end development toolkit.

    The Nature of Front End Development

    Front end development is a fuzzy area in tech because it is the connecting bridge between humans and the code beyond the screen. It represents the business and provide users with access to the goods and services that business offers.

    When we speak about front end development, we usually only talk about the code side of things. JavaScript, CSS, various frameworks and libraries become center front of the conversation. Conversations about design, however, often get sidelined. But front end is more than just code. It’s the materialization of digital design and the manifestation of business rules in a form that elicits a desirable response from the user.

    We don’t tend to acknowledge it but front end is a multi-disciplinary field that involves a mixture of code literacy, design knowledge and digital psychology. Knowledge of visual patterns, color theory and typography are a few of the things that many front end developers encounter, regardless of role delegation and segregation.

    Where Design Fits In

    Front end development and design has a relationship that is akin to the relationship between backend development and database schema architectures. Effective developers don’t exist to code in isolation and need to be connected to their adjacent fields in order to effectively perform their roles, sometimes offering advisory services to their related peers.

    Understanding design as a front end developer leverages technical knowledge with the ability to produce at least half the product without the need for additional human resources — something any potential employer would want. To understand design, and how it impacts the user and their choices, gives the front end developer diversification of skills — beyond just knowing how to code effectively.

    Design patterns also materialize into corresponding code patterns. When a developer is able to identify these patterns, it can result in CSS that is well organized and easy to extend with HTML that isn’t overly nested. In addition to this, understanding design can mean less reliance on bootstrapped libraries and solutions to create something that conforms with the expectation of good digital aesthetics.

    Going Beyond the Ordinary

    Features of digital design is more than just colors and typography. Here are some areas to explore in order to infuse and upgrade your front end development skills and knowledge tool sets.

    Digital composition design

    Responsive and fluid development is something that every front end developer is expected to know and understand. However, what it really boils down to is composition. Responsive and fluid development is merely the mathematical translations of composition into CSS code.

    What to Google:
    • layout design
    • visual hierarchy theory
    • visual cohesion in graphics design
    • rule of thirds
    • grid alignment design

    Typography for digital screens

    Typography matters. In conjunction with images, words are how an interface communicates to users its reason for existing. Different browsers and screens render the same font differently, despite having the same settings in your code. Pick two fonts you like — a serif and san serif — and stick with them until you’ve figured them out completely. This will give you a heads up on what to expect when it comes to other fonts.

    What to Google:
    • typography kerning and tracking
    • effective font size for desktop, tablet and mobile
    • digital font weights
    • optimal line length and line height for devices

    Color and aesthetics intuition

    Instagram exploded into the big deal that it is today because it leveraged the market and desire for aesthetically pleasing selfies. While you can’t quite put a filter on your front end interface, the ability to recognize and implement an effective color scheme and aesthetically pleasing compositions is something that is developed over time.

    Intuition is simply a set of internalized rules and expectations that culminates in the ability to instantly distinguish good design from bad ones — and to do that, you have to expose yourself to the world of digital design and emulate their patterns until you are able to create your own. This is the easiest and quickest method of developing your color and aesthetics intuition. Effective creativity is the act of putting different elements that worked for others together to form a visually pleasing yet unique solution.

    What to Google:
    • awwwards, dribbble, behance
    • digital color palettes
    • Adobe Awards
    • common design patterns in web and mobile

    User experience modeling

    Design is not static. Design is an experience that’s transmitted through a physical manifestation of colors, layout, images, and typography. In the digital space this includes interactive responses.

    The ability to effectively and accurately model a user’s experience with their experience of the design can help a frontend developer determine future patterns in code. This in turn can help reduce potential bugs that might hamper the overall user experience.

    Conversion occurs when there is a positive user experience. Abandoned carts happen when things don’t go as planned. Even the most loyal customers give up because the process is dumped into the ‘too hard’ basket. It’s not just about the number of clicks — it’s about the ability to easily solve an immediate problem experienced by the user. When this is not fulfilled, the user experience diminishes.

    What to Google:
    • UX value proposition
    • Heuristic evaluation process flow
    • product road map design
    • usability and utility in user experience
    • heat maps integration

    Final Words

    Design and aesthetic recognition skills is something that everyone has the potential to develop. If in doubt, follow the web trend of stripping everything back as much as possible and focus on just the thing you’re trying to achieve.

    A busy design is often the unintentional effect of an untrained eye. The ability to improve on this gives front end developers additional and very marketable skills, especially in the smaller business and startup sectors. Not every company you encounter will have big budgets and having design knowledge can help position you as an expert in front end interfaces.

    Understanding how design works can aide with implementation and communication — making it easier to talk to the resident digital designer in their language and make understanding each other’s needs, problems and requirements a lot easier.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
←上一页
1 … 137 138 139 140 141 … 262
下一页→

Proudly powered by WordPress