Get Started. It's Free
or sign up with your email address
Rocket clouds
KCDC by Mind Map: KCDC

1. More Than Code

1.1. Evaluate Tradeoffs

1.1.1. What are the real requirements?

1.1.2. Consider Pros and Cons

1.1.3. Collaborate on solutions

1.2. Know the system

1.2.1. What actually matters?

1.2.2. Where are bottlenecks (potential and existing)?

1.2.2.1. Both in terms of performance and code modifications

1.3. Standards and Best Practices

1.3.1. Separation of Concerns

1.3.1.1. Do the right stuff in the right place (e.g. MVC)

1.3.2. Naming Conventions

1.4. Don't Reinvent the wheel

1.4.1. Reinventing means you have to learn a new domain

1.4.2. Know when to buy vs build

1.5. Solve Problems

1.5.1. Solve the right problem

1.5.2. What is the end goal?

1.5.3. Why are you solving the problem you are?

1.5.3.1. Answering this could show you are going down the wrong path

1.5.4. Create Hero Apps

1.5.4.1. Little apps that automate or simplify tasks (e.g. log miners)

1.6. Write Code

1.6.1. Sometimes you have to start coding instead of only thinking about possible solutions

1.6.1.1. Paradox of Choice by Barry Schwartz

2. Spring Batch

2.1. It's neat, check it out.

2.2. A lot of the descriptions of it would lead one to believe that it is used for only large batch processing. However, it would work well with pretty much anything that reads, then processes, then writes.

3. Zen Mind - Warrior Spirit

3.1. Warriors

3.1.1. Routine

3.1.1.1. Daily Standup

3.1.1.2. Sprints

3.1.1.3. Demo

3.1.2. Duty

3.1.2.1. Them

3.1.2.1.1. Defend - Property, Principles and People

3.1.2.2. Us

3.1.2.2.1. Defend Quality

3.1.3. Training

3.1.3.1. Mentor that correctos form and little things

3.1.3.1.1. Peer Reviews

3.1.4. Close Quarters

3.1.4.1. Makes people connect

3.1.4.2. Pairing at the same desk

3.1.5. Practice

3.1.5.1. Learn new skills

3.1.5.1.1. Code camp

3.1.5.2. Keep Skills Sharp

3.1.5.2.1. Code Katas

3.1.5.3. Learn Different Styles

3.1.5.3.1. Koans

3.1.6. Demos

3.1.6.1. Show off what you are capable of now

3.1.7. Varying Roles

3.1.7.1. Dev / Tester / BA

3.1.8. Discourage Carelessness

3.1.8.1. Punishment for breaking the build

3.1.9. Plan Collaborally

3.1.9.1. Work together

3.1.9.2. Come up with better solutions

3.1.10. Celebrate Success

3.1.11. Have Retrospectives

3.1.11.1. Discuss Surprises

3.1.11.2. What failed or didn't work?

3.1.11.3. Talk about successes

3.2. Warrior's Code

3.2.1. Love and Connection

3.2.1.1. Take ownership of your projects

3.2.1.2. Connect with your teammates

3.2.2. Project Code

3.2.2.1. Why?

3.2.2.2. Design

3.2.2.3. Tests

3.2.3. Must Do's

3.2.3.1. Write tests

3.2.3.2. Good names

3.2.4. Must Not Do's

3.2.4.1. Break the build

3.2.4.2. Skip testing

3.2.5. Agile Manifesto

3.3. Zen

3.3.1. Practice

3.3.1.1. They Meditation

3.3.1.1.1. Empty mind and be present

3.3.1.2. Teaches Disipline

3.3.1.2.1. TDD

3.3.1.2.2. Katas

3.3.1.3. Side projects

3.3.1.4. Blogging

3.3.2. Connectedness

3.3.2.1. All things affect each other

3.3.3. Rhythm and Pace

3.3.3.1. Focuses Intensity then relax

3.3.3.1.1. pomodoro technique

3.3.4. Beginners Mind

3.3.4.1. open minded

3.3.4.2. many options

3.3.5. Koans

3.3.5.1. cup of tea

3.3.5.1.1. be open to new ideas

3.3.5.2. polishing a tile

3.3.5.2.1. can't change something by just doing the same thing over and over

3.3.5.3. Blind Bob

3.3.5.3.1. warning systems don't help if they aren't monitored

3.3.6. Broad Journey

3.3.6.1. more than just developing

3.4. Books

3.4.1. Zen Mind Beginners Mind

3.4.2. Code of the Warrior

4. Silence of Agile

4.1. Why?

4.1.1. 50% More ideas are generated by individuals working separately then aggregated then as a group

4.1.2. Discussion of ideas leads to a better solution

4.1.3. the more charismatic the leader, the worse the group think is no one wants to contradict the leader

4.2. How?

4.2.1. Brainstorm individually, aggregate, group, then discuss as a group, vote silently

4.2.2. When brainstorming wait until about 20% are still working

4.2.3. Speed Boat Exercise

4.2.3.1. Draw a boat with a propellar

4.2.3.2. Get ideas on things that propel the team forward, anchor the team down, and what icebergs are ahead

4.2.4. Generating User Stories

4.2.4.1. Write a section (user, want or why) then pass it on to the next guy

4.2.4.2. write a section, but in reverse, then pass

4.3. Books

4.3.1. Thinking Fast and Slow

4.3.2. Collaboration Explained

4.4. Have a new pet peeve of leading questions

5. Code Reviews

5.1. Psychology of Computer Programming by Weinberg Gerald

5.2. 10 Commandments of Egoless Programming

5.2.1. Understand and accept that you will make mistakes

5.2.2. You are not your code

5.2.3. No matter how much you know, someone will know more

5.2.4. Don't rewrite without consultation

5.2.5. Treat People who know less than you with respect, deference and patience

5.2.6. The only constant is change

5.2.7. True authority stems from knowledge

5.2.8. Fight for what you believe, but gracefully accept defeat

5.2.9. Don't be the coder in the corner

5.2.10. Critique code, not the coder. Be kind to the coder, not the code

5.3. Tips

5.3.1. Must have concise coding standards

5.3.2. Run code through a static analysis tool (e.g. findbugs, checkstyles) before the peer review

5.3.3. Everyone's code should be reviewed

5.4. A Code Review Should Not Be ...

5.4.1. just something that you have to do

5.4.2. something to dread

5.4.3. a contest

5.4.4. a whichhunt

5.4.5. a way to make everyone code just like you

5.4.6. a place to enforce standards (use a tool for that)

5.5. A Code Review Should Provide ...

5.5.1. Education

5.5.1.1. Everyone can learn from everyone

5.5.2. Quality Improvement

5.5.2.1. Code should be easy to read and follow

5.5.3. Early issue prevention

5.6. Advice for Reviewers

5.6.1. Have a conversation, don't attack

5.6.2. Keep tone positive

5.6.3. Ask for description, thought process, etc.

5.6.4. Don't forget to praise

5.7. Advice for Reviewees

5.7.1. Check your code before the review

5.7.1.1. Run it through findbugs, checkstyles, sonar, etc.

5.7.2. Offer suggestions to add to the standards

5.7.3. Remember, it's only code

5.7.4. Give people time to do the review

5.8. Idea: Reviewer 1 focuses on tests, Reviewer 2 focuses on names (method, variable, etc.), Reviewer 3 focuses on functionality

6. Object Oriented in the Wild

6.1. The presenter @jessitron was awesome, I'd go to one of her talks anyday.

6.2. Takeaways

6.2.1. Don't force the patterns of a language you know into a new language you are learning. Javascript isn't OO, don't try and make it be. It's much more functional, so learn functional programming to do it right.

6.2.2. Single Responsibility Principle is most important. DRY is secondary.

6.2.3. Interesting thought: Flip the 'older = better' paradigm on it's head. Make the new code and features you add less perfect. If they are kept, then clean them up. Your oldest code should be the cleanest.

7. Reinvent the Wheel

7.1. This was by far the worst presentation of the conference.

7.2. Why reinvent?

7.2.1. Understand the implementation

7.2.1.1. leads to make the better choice

7.2.2. Knowing how to use an API doesn't mean that you know the internals.

7.2.2.1. May lead to a less optimized solution

7.2.3. More prepared for job interviews

7.3. When to reinvent?

7.3.1. Him: Pretty much everything except for the circuits

7.3.2. Me: When it makes sense. If you end up with a bottleneck and you've knocked out all the big things from your code, then consider rewriting the API in a way that is efficient for your problem.

8. 10 Practices Every Team Should Be Doing

8.1. Culture will trump unsupported practices

8.2. Have a Customer Focus

8.2.1. Who are they?

8.2.2. Understand what they want, and more importantly why they want it

8.2.3. Build a relationship

8.3. Be Value Driven

8.3.1. Deliver valuable, working software

8.3.2. What is the greater good?

8.3.3. Everything you do should produce something of value for the customer. If it doesn't rethink your need to do it.

8.4. Work in Small Increments

8.4.1. Create a small, tight closed feedback loop with your customer

8.4.2. Easier to keep on the right track and making progress

8.5. Have a Shared Vision

8.5.1. Collaborate with your team so you are all on the same page

8.6. Use Test Driven Development

8.6.1. During the recession he was able to find people jobs that did TDD with barely an interview.

8.7. Have Daily Standups

8.7.1. Tell "outsiders" to come to your standup when they have questions or needs from the team. It's more likely the right person for the discussion will be there and is less impactful to other tasks

8.7.2. Helps build trust among team members

8.7.2.1. Repeatedly making commitments and delivering leads to trust

8.8. Visual Management of Task

8.8.1. Make it easy to see so everyone knows what everyone else is doing

8.8.2. The team owns it

8.9. Big Visual Charts

8.9.1. Don't own it, it is what it is

8.9.2. Facts are friendly

8.9.3. Hard conversations have to had, the sooner they are had the sooner issues can start to be fixed

8.10. Have Demos

8.10.1. Have the business run the demo instead of the coders. Will make sure they know what is actually going on.

8.11. Have Retrospectives

8.11.1. We aren't victims. Retros are a chance to fix things. It's easy to try something for a couple weeks without the ship sinking.

9. Open Sourcery: Using your powers for good

9.1. Programmers have super powers

9.1.1. Captain Planet

9.1.2. The Incredible Hulk

9.1.3. Daredevil

9.2. There are lots of open source projects that are helping to make the world a better place. Use your powers to help them.

9.3. Open source your side projects. The more open source code that's out there the easier it is for people to learn and become better developers

10. Sniffing Out Success: Identifying Smells and Anti-Patterns in Your Code

10.1. This was a good interactive presentation.

10.2. Lots of good stuff here. I'll likely put together a brown bag on it sometime. Till then, read the PDF.

11. Scala Koans

11.1. What are koans?

11.1.1. A koan is a story, dialogue, question or statement used in Zen practice to provoke "great doubt" and test a student's progress in Zen practice

11.1.2. The Ruby community started using koans as a way to lead people toward Ruby enlightenment.

11.1.3. Lots of different languages and technologies have embraced the idea and have their own set of koans know.

11.1.4. In the software world, the kaons are a set of tests failing tests that lead you down the path of how to use the language, or technology. Since the tests are failing, you have to fix the tests in certain order so you can move on.

11.2. Some Available Koans

11.2.1. Spring

11.2.2. MongoDB

11.2.3. Groovy

11.2.4. javascript

11.2.5. Python