开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
今日推荐开源项目:《我枯了 WamaCry》
今日推荐英文原文:《30 Ways Programmers Can Be Creative》

今日推荐开源项目:《我枯了 WamaCry》传送门:GitHub链接
推荐理由:给生活加上悲伤的色彩——假装让电脑中了病毒的项目。用法很简单,用这玩意作为某个文件的打开方式,就可以假装它被病毒锁住了,甚至你还能自定义病毒里要写的内容……用在整蛊等用途上效果极佳,如果你演技足够甚至可以以假乱真,只要别忘了仅供娱乐就好。

今日推荐英文原文:《30 Ways Programmers Can Be Creative》作者:Jun Wu
原文链接:https://medium.com/better-programming/30-ways-programmers-can-be-creative-6c10ddf2df4b
推荐理由:用于激发创造思维的一些问题

30 Ways Programmers Can Be Creative

Don’t just go through the motions of programming — create and architect

I’m a creative individual. When I was working in the corporate IT environment, I took every chance I could to be a nonconformist. Having said that, as a programmer, I also followed rules. Initially, I had to follow rules to learn from mentors. However, I also defied those rules when I wanted to implement a better idea. In my time away from the office, I defied the rules when I wanted to try (and sometimes fail miserably) to learn the best way of doing things.

One characteristic that allowed me to excel in programming is “problem-solving”. Ever since I was little, I looked at life as one giant “problem” to solve. Every day, what drives me is solving problems. If I didn’t have problems to solve, I would be miserable.

For me, every problem-solving opportunity is also an opportunity to create.

You may not agree with me. You may look at programming as actions composed of sequential steps. You may look at programming as a purely logical process. You also may tell me that one of the reasons you are attracted to programming is the “step-by-step” manner that all the “bricks” may be laid down in your castle of code. You’re a builder. You excel in getting projects done, shipped, tested, and released.

I’m all for that.

Nothing excites me more than seeing finished code organized, tested, ready for release.

Disclaimer: Through my coding adventures, working with different types of technical managers, I’ve extracted 30 ways that we all can be creative in our coding lives. These are just for inspiration. In your day to day life as a developer or a technical manager, you probably have a lot more. This article is meant to inspire all of us to think more about creativity in our day to day coding lives.

Creativity Implies Freedom. Freedom is Earned.

Development teams have a system of seniority. There are different levels of skillsets: junior developer, senior developer, architect, technical manager, etc. As you progress through your coding career, trust is earned at each stage. Once you demonstrate your competency the team will offer you more opportunities for independent work. As you work more independently, you can experiment more and creativity will come more naturally. If your creative ideas work consistently well you will probably be moved into roles that will allow you to make more creative decisions. (All of this is also dependent on company culture and team culture.)

Creativity is not handed out for free. Creativity comes with freedom that goes hand in hand with incremental demonstrations of competency.

The Start of Creativity

As a junior developer or a mid-level developer, creativity is everywhere to be found. Below is a list of casual but important decisions that can be made. These decisions all call for your creativity in finding the “best” solution.
  • What’s the best stylistic considerations to follow for implementing this feature? (spacing, indentation, commenting, naming conventions)
  • Should there be a design pattern used to implement a given feature? What’s the best one to use?
  • What are some data structure choices that can be made? (hashtable, dictionary, array, list, etc..)
  • What are some data type choices that can be made? (string, character array, int, float, etc..)
  • Can any of the functions implemented be reusable?
  • Are there too many lines of code?
  • What’s the best design for handling exceptions?
  • What’s the best way to handle garbage collection or memory usage?
  • What are some unit tests that can be written for this feature? How do I write them?
  • Whose code can I read to learn more? What should I learn next on my stack?

The Next Level of Creativity

As a senior developer, you’re already familiar with the full stack of technologies required in the development cycle. You’re also familiar with many issues that may creep up, both in the codebase, the development cycle, and the testing phase. You are not only skilled in figuring out the root cause of issues, but also on hand to make key design decisions for optimizations. You’re a leader that the junior developers look up to.
  • Why did this developer implement the feature this way? What is the problem in the developer’s thinking? How can I help to steer the developer in the right direction?
  • Why is this bug creeping up again? What is the root cause? Is this a design issue, implementation issues, or a testing issue? How should we fix it?
  • Will this code be maintainable in the long run?
  • Do we need all these patterns to implement this one feature?
  • Have we made the wrong decision in our choice of infrastructure?
  • Is performance tuning necessary for the messaging services, data retrieval/storage, etc..? How should we tune? What metrics to use for tuning?
  • Are there any security concerns in the implementations?
  • Can developers benefit from knowledge sharing? What kind of knowledge sharing is optimal?
  • Is it time to refactor the codebase? How should we refactor some of it?
  • What’s the best way to test? What does the testing plan look like?

The Final Level of Creativity

As a technical manager, you are participating in all levels of design and technical specifications for the projects you’re assigned. You setting technical limitations and expectations for your projects. You’re in charge of a team of senior and junior developers. Because you’re the leader, you need to take care of administrative tasks, work with clients, project management team, and technologists from other teams to figure out the best way to complete your projects. In all three silos, technical, management, and business, you need to be creative about your decisions.
  • What Programming Language to use for a particular part of the system?
  • What infrastructure resources do we need for the project?
  • What are the trade-offs for data storage? How can we scale up or scale-out?
  • What are the key design features that must be worked out with the architect? What technical specifications are needed for these key features?
  • What are the technical limitations of the proposed business requirements?
  • What are the budget concerns relating to the timeline, developers on the team, and other resources on the team?
  • Is the codebase maintainable? Are there concerns with how the development cycle is run that affects codebase maintainability?
  • How and when should work be assigned? How long are the sprints and the development cycles? When should code reviews happen? How should they happen?
  • Which teams do you need to work with to acquire all the necessary resources for the project — requirements, budget, and infrastructure? What are the necessary networking steps to acquire these resources?
  • What does the testing and sign off process look like? Who are the stakeholders affected? How should we notify them?
Every day we work as developers, senior developers, or technical managers, we make decisions large and small. All these decisions are opportunities to be creative. In being creative about our choices, we validate our knowledge and earn respect. If we’re proactive about seeking a better solution in all of our decisions, we’ll earn the freedom to be creative in our development teams. We don’t work entirely independently, but, we can be trusted to do self-driven quality work. On a development team, no matter what level of seniority we are at, we have opportunities to exercise our creativity and put it to good use.

Our jobs are not just jobs — they’re creative adventures.

What are you waiting for?
下载开源日报APP:https://openingsource.org/2579/
加入我们:https://openingsource.org/about/join/
关注我们:https://openingsource.org/about/love/