開源日報 每天推薦一個 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/