# Skorks > Alan Skorkin on building software, and the teams that build it, as AI changes both. Skorks is the blog of Alan Skorkin, a developer turned technical leader with more than twenty years in software, based in Melbourne, Australia. Its 117 posts, from 2008 to 2013, cover Ruby, algorithms and search, the command line, agile process, teams, hiring, learning and the craft of programming. New posts, added occasionally, are about how AI is changing software engineering and the teams that do it. Older posts are kept as a historical record, so some details may have changed since. Each post below links to a Markdown copy of it; the HTML page is the same URL without `index.md`. ## Posts - [Ruby & (Ampersand) Parameter Demystified](https://skorks.com/2013/04/ruby-ampersand-parameter-demystified/index.md): What the & does when you define and call Ruby methods that take a block, and how that explains the symbol-to-proc trick. - [Ruby – Why U No Have Nested Exceptions?](https://skorks.com/2013/04/ruby-why-u-no-have-nested-exceptions/index.md): Why you'd wrap errors from external libraries in your own exception types without losing the original error, and how the nesty gem does it. - [The Best Way To Pretty Print JSON On The Command-Line](https://skorks.com/2013/04/the-best-way-to-pretty-print-json-on-the-command-line/index.md): Three ways to pretty print JSON on the command line: Python's json.tool, YAJL's json_reformat, and ppjson, a Ruby tool that can also uglify JSON. - [A Closure Is Not Always A Closure In Ruby](https://skorks.com/2013/03/a-closure-is-not-always-a-closure-in-ruby/index.md): Why blocks passed to instance_eval stop behaving like closures, and how instance_exec, _why's cloaker and method_missing get the lost scope back. - [What Is A Startup (Or A Startup Idea)?](https://skorks.com/2011/11/what-is-a-startup-or-a-startup-idea/index.md): A startup as a series of assumptions arranged in a funnel, like the pirate metrics, and why it's best to prove them one at a time from the top. - [Why Developers Never Use State Machines](https://skorks.com/2011/09/why-developers-never-use-state-machines/index.md): Why developers rarely use state machines, seeing them as overkill until it's too late to switch, and what the state_machine gem did for CrowdHired. - [When Developers Go To Great Length To Save Typing 4 Letters](https://skorks.com/2011/08/when-developers-go-to-great-length-to-save-typing-4-letters/index.md): Tracing what rails s does, through the rubygems wrapper, railties and Rack, to make Thin the default server instead of Webrick. - [Even Boring Form Data Can Be Interesting (For A Developer)](https://skorks.com/2011/08/even-boring-form-data-can-be-interesting-for-a-developer/index.md): How credit card numbers verify themselves with the Luhn algorithm, how Australian Business Numbers are validated, and a way to generate valid ones in Ruby. - [Algorithms, A Dropbox Challenge And Dynamic Programming](https://skorks.com/2011/02/algorithms-a-dropbox-challenge-and-dynamic-programming/index.md): Solving the Dropbox Diet challenge, a subset sum problem, in Ruby: first with an exponential time algorithm, then with dynamic programming, step by step. - [A Unit Testing Framework In 44 Lines Of Ruby](https://skorks.com/2011/02/a-unit-testing-framework-in-44-lines-of-ruby/index.md): How to build a minimal Rspec-like unit testing framework in 44 lines of Ruby, with describe, it and should, and how easily it could be extended. - [The Greatest Developer Fallacy Or The Wisest Words You’ll Ever Hear?](https://skorks.com/2011/02/the-greatest-developer-fallacy-or-the-wisest-words-youll-ever-hear/index.md): Why 'I will learn it when I need it' becomes an excuse to coast: you don't know what you don't know, some things take too long, and depth brings breadth. - [Here Is The Main Reason Why You Suck At Interviews](https://skorks.com/2010/12/here-is-the-main-reason-why-you-suck-at-interviews/index.md): Why most people do badly at interviews (too little preparation and practice) and how to prepare for behavioural, coding and Mount Fuji questions. - [Converting Integers To Words – Bringing Order To English Through Code](https://skorks.com/2010/11/converting-integers-to-words-bringing-order-to-english-through-code/index.md): An integer-to-English converter in Ruby, inspired by Lisp's ~r format directive, and the simpler, more logical English for numbers that the code suggests. - [Write A Function To Determine If A Number Is A Power Of 2](https://skorks.com/2010/10/write-a-function-to-determine-if-a-number-is-a-power-of-2/index.md): Iterative, recursive and bit-hacking ways to tell if a number is a power of 2, and why the bit hack is the cleanest answer in an interview. - [99 Out Of 100 Programmers Can’t Program – I Call Bullshit!](https://skorks.com/2010/10/99-out-of-100-programmers-cant-program-i-call-bullshit/index.md): Why the claim that 99 in 100 programmers can't program says more about a company's job ads and interviews than about programmers. - [Learning A Software Development Lesson From A Children’s Poem](https://skorks.com/2010/06/learning-a-software-development-lesson-from-a-childrens-poem/index.md): What the wise old owl of a children's poem teaches developers about opinions: know when to listen, but always form one of your own. - [When A ‘Mount Fuji’ Question Is Not Really A ‘Mount Fuji’ Question (Are You As Smart As You Think You Are)](https://skorks.com/2010/06/when-a-mount-fuji-question-is-not-really-a-mount-fuji-question-are-you-as-smart-as-you-think-you-are/index.md): Two interview puzzles that sound like 'Mount Fuji' questions but have concrete, reasoned answers: the village of sinners and the prisoners' light switch. - [On Personal Skills And How Even Riding A Bike Is Not Like Riding A Bike](https://skorks.com/2010/05/on-personal-skills-and-how-even-riding-a-bike-is-not-like-riding-a-bike/index.md): Why skills you don't use fade faster than you think, why resumes overstate them, and how to choose which skills to keep sharp. - [How To Be A Real Elite Programmer And Make Sure Everybody Knows It](https://skorks.com/2010/05/how-to-be-a-real-elite-programmer-and-make-sure-everybody-knows-it/index.md): A sarcastic list of 19 habits of the 'real elite programmer', from no sleep to RTFM, and a reminder that most of us slip into some of them. - [Ruby Procs And Lambdas (And The Difference Between Them)](https://skorks.com/2010/05/ruby-procs-and-lambdas-and-the-difference-between-them/index.md): The four ways to create a Proc in Ruby, trivia about equality, calling and arity, and the real difference between procs and lambdas: return and break. - [Why I Love Reading Other People’s Code And You Should Too](https://skorks.com/2010/05/why-i-love-reading-other-peoples-code-and-you-should-too/index.md): Why reading other people's code is how you learn from the masters, and nine techniques for doing it, from building and running the code to refactoring it. - [Closures – A Simple Explanation (Using Ruby)](https://skorks.com/2010/05/closures-a-simple-explanation-using-ruby/index.md): A simple explanation of closures (functions you can pass around that remember the variables in scope when made), with Ruby examples and why they're useful. - [Who Deserves The Credit For Software Craftsmanship and Great Design?](https://skorks.com/2010/05/who-deserves-the-credit-for-software-craftsmanship-and-great-design/index.md): How the 1970s Unix philosophy already held most agile and good design ideas, and why agile's real achievement was the missionary work of spreading them. - [Software As A Destination vs Software As A Journey](https://skorks.com/2010/05/software-as-a-destination-vs-software-as-a-journey/index.md): Why companies that treat software as a destination end up with failed projects, and how the agile movement gave a voice to software as a journey. - [Sort Files Like A Master With The Linux Sort Command (Bash)](https://skorks.com/2010/05/sort-files-like-a-master-with-the-linux-sort-command-bash/index.md): A tour of the Linux sort command by example: case, locale and stable sorts, numeric sorts, sorting by column, unique lines, random order, merging and checking. - [The Secret To Getting More Ideas (And Better Ones Too)](https://skorks.com/2010/05/the-secret-to-getting-more-ideas-and-better-ones-too/index.md): Why the way to get more and better ideas is to keep needing them, training an idea-generating muscle, and to write every idea down. - [What Every Developer Should Know About URLs](https://skorks.com/2010/05/what-every-developer-should-know-about-urls/index.md): Everything a web developer should know about URLs: their nine parts, special characters and encoding, and how relative URLs resolve to absolute ones. - [Executing Multiple Commands – A Bash Productivity Tip](https://skorks.com/2010/05/executing-multiple-commands-a-bash-productivity-tip/index.md): How to run several commands in one go in bash with ; and &&, or in the background with &, and how to manage the background jobs. - [Merging Ruby Hashes And Bang Method Usage](https://skorks.com/2010/04/merging-ruby-hashes-and-bang-method-usage/index.md): Why merging thousands of Ruby hashes with merge is about 500 times slower than with merge!, traced with a profiler to Hash#initialize_copy. - [The Most Annoying Habit Of A Software Manager](https://skorks.com/2010/04/the-most-annoying-habit-of-a-software-manager/index.md): Why managers shouldn't call developers 'resources', as if they were plug-and-play components, and why dropping the word makes a big difference. - [Software Development And The Sunk Cost Fallacy](https://skorks.com/2010/04/software-development-and-the-sunk-cost-fallacy/index.md): How the sunk cost fallacy keeps software teams sticking with bad technologies, libraries and projects, and why it's never too late to drop them. - [A “FizzBuzz” Faux Pas](https://skorks.com/2010/04/a-fizzbuzz-faux-pas/index.md): How a quick FizzBuzz answer, written to prove the question too easy, turned out wrong, and why you should never write code on autopilot. - [On The Mastery Of Teaching](https://skorks.com/2010/04/on-the-mastery-of-teaching/index.md): What it takes to be a great teacher, inspired by Polya's How To Solve It, and why teaching is a skill to practise like any other. - [Serializing (And Deserializing) Objects With Ruby](https://skorks.com/2010/04/serializing-and-deserializing-objects-with-ruby/index.md): Ruby's options for serializing objects (YAML, JSON and Marshal), how to use each, and which to pick for readability or speed. - [Why Aren’t You Awesome Yet? (Learning Via The World-Wide Community)](https://skorks.com/2010/04/why-arent-you-awesome-yet-learning-via-the-world-wide-community/index.md): How books, experts' blogs, your own blog, Stack Overflow, Wikipedia and open source make it easier than ever to learn and get good at what you do. - [How The Quest For Efficiency Turns Small Problems Into Big Ones](https://skorks.com/2010/04/how-the-quest-for-efficiency-turns-small-problems-into-big-ones/index.md): How strict prioritization and timeboxing can let small issues, like thousands of ignored compiler warnings, fester into big ones. - [Ruby Access Control – Are Private And Protected Methods Only A Guideline?](https://skorks.com/2010/04/ruby-access-control-are-private-and-protected-methods-only-a-guideline/index.md): How private, protected and public methods work in Ruby, where it's all about the receiver, and how send gets around them, for example to test private methods. - [On The Value Of Fundamentals In Software Development](https://skorks.com/2010/04/on-the-value-of-fundamentals-in-software-development/index.md): Why real expertise comes from knowing the fundamentals cold, both macro-level concepts like trees and optimistic locking and micro-level ones like core APIs. - [Solving The Towers Of Hanoi Mathematically And Programmatically – The Value Of Recursion](https://skorks.com/2010/03/solving-the-towers-of-hanoi-mathematically-and-programmatically-the-value-of-recursion/index.md): Solving the Towers of Hanoi in Ruby, first with an intuitive iterative algorithm and then recursively from its recurrence, and why the maths gives simpler code. - [How To Answer A Programming Interview Question And Look Good Doing It](https://skorks.com/2010/03/how-to-answer-a-programming-interview-question-and-look-good-doing-it/index.md): A step-by-step process for answering a whiteboard programming question that shows how you think and communicate, not just whether you can code. - [You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To Be A Great One](https://skorks.com/2010/03/you-dont-need-math-skills-to-be-a-good-developer-but-you-do-need-them-to-be-a-great-one/index.md): Why everyday CRUD work needs little math, but search, machine learning, cryptography and other interesting fields need plenty. - [How To Quickly Generate A Large File On The Command Line (With Linux)](https://skorks.com/2010/03/how-to-quickly-generate-a-large-file-on-the-command-line-with-linux/index.md): Four ways to generate a large test file on the Linux command line: dd from /dev/zero or /dev/urandom, doubling a file with cat, or a Ruby one-liner. - [Faster List Intersection Using Skip Pointers](https://skorks.com/2010/03/faster-list-intersection-using-skip-pointers/index.md): How skip pointers can speed up posting list intersection in a search engine, a Ruby implementation, and timings showing when they help and when they hurt. - [An Interview Question That Prints Out Its Own Source Code (In Ruby)](https://skorks.com/2010/03/an-interview-question-that-prints-out-its-own-source-code-in-ruby/index.md): Why writing a quine, a program that prints its own source code, makes a good interview question, and a one-line Ruby quine with an explanation of how it works. - [Timing Ruby Code – It Is Easy With Benchmark](https://skorks.com/2010/03/timing-ruby-code-it-is-easy-with-benchmark/index.md): Timing Ruby code by hand, with a method that takes a block, and then the easier way with Ruby's built-in Benchmark module. - [The Difference Between A Developer, A Programmer And A Computer Scientist](https://skorks.com/2010/03/the-difference-between-a-developer-a-programmer-and-a-computer-scientist/index.md): How a computer scientist, a programmer and a developer differ in skills, focus and priorities, even though the terms are often used interchangeably. - [Writing A More Ruby-ish Array Intersection Function And Sorting Structs](https://skorks.com/2010/03/writing-a-more-ruby-ish-array-intersection-function-and-sorting-structs/index.md): Rewriting an efficient array intersection function in more idiomatic Ruby with a custom iterator, plus sorting and intersecting OpenStructs. - [Why Your Developers Don’t Want To Swap Pairs – Practical Agility](https://skorks.com/2010/03/why-your-developers-dont-want-to-swap-pairs-practical-agility/index.md): Why developers avoid swapping pairs: a rushed rollout or lack of buy-in on new agile teams, and stories that are too big on experienced ones. - [The Most Common Things You Do To A Large Data File With Bash](https://skorks.com/2010/03/the-most-common-things-you-do-to-a-large-data-file-with-bash/index.md): The three things you nearly always do to a large data file before using it (delete the first line, the last line and blank lines) and how to do them with sed. - [How A Good Manager Is Like A Ninja](https://skorks.com/2010/03/how-a-good-manager-is-like-a-ninja/index.md): Why a good manager, like a ninja, works unseen to remove obstacles for the team, and how to grow into that role. - [How Search Engines Process Documents Before Indexing](https://skorks.com/2010/03/how-search-engines-process-documents-before-indexing/index.md): What a search engine does to documents before indexing: detecting encoding, tokenizing, stop words, normalization, stemming and lemmatization. - [Using Ruby On Rails With Oracle And Deploying It All To Tomcat](https://skorks.com/2010/02/using-ruby-on-rails-with-oracle-and-deploying-it-all-to-tomcat/index.md): How to get a Ruby on Rails app talking to an Oracle database, then package it with JRuby and Warbler and deploy it to Tomcat. - [Did Your Boss Thank You For Coding Yourself to Death?](https://skorks.com/2010/02/did-your-boss-thank-you-for-coding-yourself-to-death/index.md): Why programmers shouldn't work themselves into the ground for the company, told through the story of a brilliant developer called John. - [The One Skill You Need To Master To Succeed And Grow As A Developer](https://skorks.com/2010/02/the-one-skill-you-need-to-master-to-succeed-and-grow-as-a-developer/index.md): Why the ability to ask for and take criticism is the one skill developers most need, why people are bad at it, and a few ways to get better. - [High Academic Results Make Better Programmers](https://skorks.com/2010/02/high-academic-results-make-better-programmers/index.md): Why good grades are more likely to mean a better programmer than a less creative one, a response to Scott Berkun in Beautiful Teams. - [Lets Roll Our Own Boolean Query Search Engine](https://skorks.com/2010/02/lets-roll-our-own-boolean-query-search-engine/index.md): How to turn a basic inverted index into a simple boolean search engine in Ruby, handling AND, OR and NOT queries efficiently. - [Thoughts On TDD (A Case Study With Ruby And RSpec)](https://skorks.com/2010/01/thoughts-on-tdd-a-case-study-with-ruby-and-rspec/index.md): A Ruby and RSpec case study of where TDD helps and where it slows you down, and why there's no need to feel guilty when you don't test first. - [The Perfect Size For An Agile Team – 1 Person – It’s Crazy!](https://skorks.com/2010/01/the-perfect-size-for-an-agile-team-1-person-its-crazy/index.md): A thought experiment about a one-person agile team of a single super-developer: no conflict, but a single point of failure and nobody to keep them honest. - [Using Multiple Rubies Seamlessly On The One Machine With Rvm](https://skorks.com/2010/01/using-multiple-rubies-seamlessly-on-the-one-machine-with-rvm/index.md): How to install RVM on Ubuntu, install several Rubies, switch between them and set a default, and get NetBeans to find the RVM-managed ones. - [Search Fundamentals – Basic Indexing](https://skorks.com/2010/01/search-fundamentals-basic-indexing/index.md): Search fundamentals: why search engines build an inverted index, the basic terminology, and a simple index built in Ruby. - [To Code With Or Without Music That Is The Question](https://skorks.com/2009/10/to-code-with-or-without-music-that-is-the-question/index.md): Whether music helps or hurts while coding, the two theories about it, and why the answer depends on how you learn. - [Using Bash To Output To Screen And File At The Same Time](https://skorks.com/2009/09/using-bash-to-output-to-screen-and-file-at-the-same-time/index.md): How to use tee in bash to send a command's output to both the screen and a file, including stderr alone by swapping file descriptors. - [It’s Not About The Duct Tape It’s About The People (And More)](https://skorks.com/2009/09/its-not-about-the-duct-tape-its-about-the-people-and-more/index.md): A response to Joel Spolsky's 'The Duct Tape Programmer': shipping is key, but you don't need to be a duct tape programmer to be focused on delivery. - [Become A Better Developer By Indexing Your Brain](https://skorks.com/2009/09/become-a-better-developer-by-indexing-your-brain/index.md): Why a good memory makes you a better developer, how mnemonics and priming work, and a simple trick for indexing your brain like a search engine. - [Ruby Exceptions And Exception Handling](https://skorks.com/2009/09/ruby-exceptions-and-exception-handling/index.md): The basics of exceptions in Ruby: raising and rescuing them, creating your own error classes, and the built-in exception hierarchy. - [Output Redirection With Bash](https://skorks.com/2009/09/output-redirection-with-bash/index.md): How to redirect STDOUT and STDERR to files in bash, together or separately, and why the output can arrive out of order. - [The Best Way To Interview A Developer](https://skorks.com/2009/09/the-best-way-to-interview-a-developer/index.md): Why traditional interviews don't show how good a developer is, and why putting a candidate in your team for a day works better. - [Ruby Equality And Object Comparison](https://skorks.com/2009/09/ruby-equality-and-object-comparison/index.md): How Ruby's ==, eql? and equal? differ, how to define equality for your own objects, and how to make them comparable with <=>. - [Bash Shortcuts For Maximum Productivity](https://skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/index.md): The bash (Readline) shortcuts worth knowing for editing, recalling and controlling commands, plus the ! and ^ history tricks. - [The Secret Of Being A Great Apprentice](https://skorks.com/2009/09/the-secret-of-being-a-great-apprentice/index.md): What makes a great apprentice to a developer mentor: genuine interest, curiosity and respect, and whether it's even possible to fail. - [Does Software Development Have A Culture Of Rewarding Failure](https://skorks.com/2009/09/does-software-development-have-a-culture-of-rewarding-failure/index.md): Why software teams get little credit for smooth, on-time projects but are hailed as heroes for rescuing death marches, and why that needs to change. - [Types Of Agile Projects And The Value Of Velocity](https://skorks.com/2009/09/types-of-agile-projects-and-the-value-of-velocity/index.md): What velocity is good for on deadline-constrained and feature-constrained agile projects, even when you don't know the distance to the end. - [Rules Of Standup – You Don’t Need To Justify Your Own Existence](https://skorks.com/2009/09/rules-of-standup-you-dont-need-to-justify-your-own-existence/index.md): Why not everyone needs to speak at standup, and why a team that trusts each other shouldn't use it to justify their own existence. - [True, False And Nil Objects In Ruby](https://skorks.com/2009/09/true-false-and-nil-objects-in-ruby/index.md): Why true, false and nil are full objects in Ruby, which objects count as false, and how nil can act like a Null Object. - [The Secret Of Being A Great Mentor](https://skorks.com/2009/09/the-secret-of-being-a-great-mentor/index.md): What makes a great mentor to a less experienced developer, whether the relationship is formal or informal, and the surefire ways to fail at it. - [Manufacturing Authority And Trust](https://skorks.com/2009/09/manufacturing-authority-and-trust/index.md): How to get your opinions heard at work by having, faking or borrowing authority and trust. - [Using Ruby Blocks And Rolling Your Own Iterators](https://skorks.com/2009/09/using-ruby-blocks-and-rolling-your-own-iterators/index.md): A closer look at Ruby blocks: how the two syntaxes differ in precedence, writing your own iterators, block parameters, and blocks as closures. - [A Wealth Of Ruby Loops And Iterators](https://skorks.com/2009/09/a-wealth-of-ruby-loops-and-iterators/index.md): Every simple way to loop and iterate in Ruby in one place: loop, while, until, for, each, times, upto, step and each_index, plus redo and retry. - [All Developers Should Know How They Learn Best](https://skorks.com/2009/08/all-developers-should-know-how-they-learn-best/index.md): Why developers should know how they learn best, using Myers-Briggs, left and right brain, VARK and multiple intelligences to find what works for you. - [The Most Important Agile Practice Of All](https://skorks.com/2009/08/the-most-important-agile-practice-of-all/index.md): Why respect for everyone you work with matters more on an agile team than any practice or tool, and how it shapes teaching, learning and teamwork. - [Before There Was Lean, Agile Or Waterfall There Was Theory X, Y And Z](https://skorks.com/2009/08/before-there-was-lean-agile-or-waterfall-there-was-theory-x-y-and-z/index.md): Where software process ideas come from: Taylor's scientific management, Mayo's Hawthorne experiments, and McGregor's and Ouchi's Theories X, Y and Z. - [More Advanced Ruby Method Arguments – Hashes And Block Basics](https://skorks.com/2009/08/more-advanced-ruby-method-arguments-hashes-and-blocks/index.md): Using hashes as Ruby method arguments, including leaving off the braces for a final hash, and the basics of blocks, which aren't really arguments at all. - [Does YAGNI Mean You Ignore The Obvious](https://skorks.com/2009/08/does-yagni-mean-you-ignore-the-obvious/index.md): Why YAGNI is a tool, not an objective, and how any practice applied without thinking, TDD included, crosses a 'stupidity threshold'. - [How A Ruby Case Statement Works And What You Can Do With It](https://skorks.com/2009/08/how-a-ruby-case-statement-works-and-what-you-can-do-with-it/index.md): How Ruby's case statement works under the hood with ===, and what that lets you do, from multi-value whens to custom matching for your own objects. - [Do You Morph Into A Different Programmer?](https://skorks.com/2009/08/do-you-morph-into-a-different-programmer/index.md): Why every project, task and interaction should make you a slightly better developer, and what to do if your job has stopped teaching you anything. - [The 3 Pillars Of Job Satisfaction](https://skorks.com/2009/08/the-3-pillars-of-job-satisfaction/index.md): The three pillars of job satisfaction (money, people and type of work), and how satisfied you feel with all three, two, one or none of them. - [Method Arguments In Ruby](https://skorks.com/2009/08/method-arguments-in-ruby/index.md): Required arguments, arguments with default values and optional arguments in Ruby, and the rules for mixing them in one method. - [Why Open Source Rules And Commercial Drools](https://skorks.com/2009/08/why-open-source-rules-and-commercial-drools/index.md): A reply to Rob Walling's 'Competing With Open Source': why open source beats commercial software on installation, documentation, usability and support. - [Is Your Code Worthy Of Being Improved](https://skorks.com/2009/08/is-your-code-wthy-of-being-improvedor/index.md): Why code should at least be worthy of improvement: be explicit, avoid Spring autowiring and AOP where they obscure meaning, and rarely break conventions. - [Is Basic Authentication Really Insecure?](https://skorks.com/2009/08/is-basic-authentication-really-insecure/index.md): Why basic authentication is only as secure as the connection it's sent over, and why no scheme helps once the user's machine is compromised. - [Digging Into A Ruby Installation, Require vs Load And Other Stuff](https://skorks.com/2009/08/digging-into-a-ruby-installation-require-vs-load/index.md): Where a Ruby installation keeps its files, how require differs from load, and how Ruby finds libraries and gems. - [How People Can Get You To Do What They Want](https://skorks.com/2009/08/how-people-can-get-you-to-do-what-they-want/index.md): What the Milgram experiment shows about obedience to authority, and why developers should question processes and code that look wrong. - [Bash Shell Awesomeness – Mass Killing Processes (On Ubuntu)](https://skorks.com/2009/08/bash-shell-awesomeness-mass-killing-processes-on-ubuntu/index.md): A bash one-liner that kills every process owned by one user on Ubuntu, piping ps through grep and cut to xargs kill, explained step by step. - [Are You The Best Developer In The World?](https://skorks.com/2009/08/are-you-the-best-developer-in-the-world/index.md): Why developers should find a balance between humility and self-promotion: acknowledge successes, take praise graciously and keep learning. - [Different Types Of Encoding Schemes – A Primer](https://skorks.com/2009/08/different-types-of-encoding-schemes-a-primer/index.md): A primer on the encodings web developers keep running into (HTML, URL, Unicode, Base64 and hex) and when each one applies. - [Installing And Using SQLite With Ruby On Windows](https://skorks.com/2009/08/installing-and-using-sqlite-with-ruby-on-windows/index.md): How to install SQLite and the sqlite3-ruby gem on Windows, where to put the DLL, and a first Ruby script that creates a table and reads it back. - [Building Software Development Expertise – Using The Dreyfus Model](https://skorks.com/2009/08/building-software-development-expertise-using-the-dreyfus-model/index.md): The Dreyfus model's five stages of skill, how well they fit software development, and whether a team can deliberately build experts. - [Stopping People From Switching Off During Standups](https://skorks.com/2009/07/stopping-people-from-switching-off-during-standups/index.md): Ways to stop a team attending standups on autopilot: a speaking token, a daily joke, a random speaking order, a new time or place, or walking the board. - [How To Write A Simple Web Crawler In Ruby](https://skorks.com/2009/07/how-to-write-a-web-crawler-in-ruby/index.md): A simple web crawler in Ruby, the first step towards a search engine, that crawls the web or a single domain within depth and page limits. - [In Defense Of The Software Craftsmanship Concept](https://skorks.com/2009/07/in-defense-of-the-software-craftsmanship-concept/index.md): A reply to Krishna Kumar's critique of software craftsmanship: why experience, constant learning and soft skills still set craftsmen apart. - [Why MDA Is Like Waterfall Process And Is Doomed To Suffer The Same Fate](https://skorks.com/2009/07/why-mda-is-like-waterfall-process/index.md): Why Model Driven Architecture makes the same mistake as waterfall, chasing a perfect up-front definition, and is likely to go the same way. - [How To Get The Most Out Of Your Design Sessions](https://skorks.com/2009/07/how-to-get-the-most-out-of-your-design-sessions/index.md): How to get more out of agile design sessions: start with a joke, model or act out the problem, and let the team brainstorm before anyone presents a solution. - [Effective vs Ineffective Pair Programming](https://skorks.com/2009/07/effective-vs-ineffective-pair-programming/index.md): Why pair programming works, and how its value changes depending on whether the driver, the navigator, both or neither know the system. - [How To Write A Name Generator (In Ruby)](https://skorks.com/2009/07/how-to-write-a-name-generator-in-ruby/index.md): A data-driven random name generator in Ruby, ported from Chris Pound's Perl language confluxer and split into classes, whose names sound like its sample data. - [Downgrading A Ubuntu Package](https://skorks.com/2009/07/downgrading-a-ubuntu-package/index.md): How to downgrade an Ubuntu package to an earlier version with apt-cache and aptitude, using a Java 6 update that broke Cobertura as the example. - [Are You Actually A Post-Agilist?](https://skorks.com/2008/10/are-you-actually-a-post-agilist/index.md): What post-Agilism is, and why staying true to the spirit of agile matters more than any particular process or set of practices. - [Are You Using The Full Power Of Spring When Injecting Your Dependencies?](https://skorks.com/2008/10/are-you-using-the-full-power-of-spring-when-injecting-your-dependencies/index.md): Ways to create and wire Spring beans beyond setter and constructor injection: static and instance factory methods, FactoryBean and lookup-method injection. - [What’s Your Team Building Budget? – Creating and Recognising Team Building Opportunities](https://skorks.com/2008/09/creating-and-recognising-team-building-opportunities/index.md): Five inexpensive ways to build a team: an early finish at the pub, a surprise like a hot dog cart, weekend outings, conferences and shared adversity. - [The Real Measure Of Code Quality](https://skorks.com/2008/09/the-real-measure-of-code-quality/index.md): Why the real measure of code quality is whether you, or you and your pair, honestly think the code is good enough. - [Why Teams Succeed And Why They Fail](https://skorks.com/2008/09/why-teams-succeed-and-why-they-fail/index.md): The four combinations of a strong or weak leader with a team of leaders or followers, and how each kind of team tends to perform. - [Tweaking English For Fun And Profit … Facilitating Poetry](https://skorks.com/2008/09/tweaking-english-for-fun-and-profit-facilitating-poetry/index.md): A tongue-in-cheek case for bending English to make poems shorter and rhyme better, with a before-and-after poem as proof. - [The 4 Unlikely Traits of Good Developers](https://skorks.com/2008/09/the-4-unlikely-traits-of-good-developers/index.md): Four less obvious traits of good developers: creativity, insane curiosity, finding fault with everything, and working hard to be lazy. - [10 MORE Awesome Fantasy Series That Are Not Potter or LoTR](https://skorks.com/2008/09/10-more-awesome-fantasy-series-that-are-not-potter-or-lotr/index.md): Ten more under-appreciated fantasy series, several suggested by readers, from Sean Russell's Initiate Brother to Harry Turtledove's Darkness series. - [10 Awesome Fantasy Series That Are Not Potter or LoTR](https://skorks.com/2008/09/10-awesome-fantasy-series-that-are-not-potter-or-lotr/index.md): Ten fantasy series for readers who've finished Potter or Lord of the Rings and want something other than Jordan, Martin or Goodkind. - [How To Retain Your IT Employees For Longer](https://skorks.com/2008/09/how-to-retain-your-it-employees-for-longer/index.md): Seven things employers can do to keep IT staff longer, from learning opportunities and career paths to interesting work and paying people what they're worth. - [3 Things They Should Have Taught In My Computer Science Degree](https://skorks.com/2008/08/3-things-they-should-have-taught-in-my-computer-science-degree/index.md): Three things a computer science degree should teach but often doesn't: open source development, an agile process, and corporate politics and relationships. - [Java and .Net Taking On Contenders And Winning](https://skorks.com/2008/08/java-and-net-taking-on-contenders-and-winning/index.md): Why Java and .Net are likely to stay dominant for a long time: big-vendor backing, huge open source ecosystems and billions invested in existing systems.