Tips that every software developer should be aware of

I like these ones:
  • Write Code That Writes Code: About writing code generators (automate everything)
  • Refactor early, refator often
  • Use a Single Editor Well: Who said vim :-)
  • You Can’t Write Perfect Software
  • Test Early. Test Often. Test Automatically: Especially important with popular scripting dynamic programming languages
I will write more about these tips in future.

How NSA can decrypt ciphers with 1024 bit keys?

Here is the complete story.
The story is: Most of today's secure network data transfers (e.g. when you enter your credit card number in a website), is done based on protocols which are using Diffie-Hellman algorithm. This algorithm's implementation uses some fixed numbers as its input parameters.
NSA (supposedly) has pre-calculated different computation results for the single most common used parameter and using this set of pre-calculated data (plus several hundred CPU cores), it can decrypt text which is encrypted using 1024 bit keys.
If you use 2048 bit keys they will not be able to do this but currently most of client and server applications are pre-configured to use this type of key. 

9 Anti-Patterns Every Programmer Should Be Aware Of

  1. Premature Optimization: Do not optimize too early before you know bottlenecks and problems in the live environment.
  2. Bikeshedding: Do not spend time on minor topics 
  3. Analysis Paralysis: Do not analysis too much.
  4. God Class: Avoid big classes that control many other classes.
  5. Fear of Adding Classes: Add new classes if necessary and do not fear about the complexity.
  6. Inner-platform Effect: Try to use available features of your OS instead of re-writing them in your programming language.
  7. Magic Numbers and Strings: Avoid magic and undocumented numbers in your code.
  8. Management by Numbers: Do not rely too much on numbers like LoC.
  9. Useless (Poltergeist) Classes: If class is not doing anything valuable, remove it.

A next-generation programming platform?

This startup has big claims about programming: The software world is swimming in a sea of accidental complexity caused by 40 years of accumulated technical debt.
The startup provides a set of tools and frameworks which help developers build better software systems. This includes:
  • The Unison language: a powerful, typed, purely functional underlying programming language
  • The Unison editor: a rich, in-browser semantic editor for editing programs
  • The Unison node: the backend implementation of the Unison language, its typechecker, and the API used by the Unison editor and other remote nodes in the network
The project is MIT licensed and open source.