Sublime Text 2 – My list of necessary plugins

Why Sublime Text 2?

A lot of developers use the hipped text editor Sublime Text 2 and I’m one of them. Multiple reasons influence such a decision and from experience the important things I look for in a text editor are the following (in no particular order):

  • Simple User Interface: Simplicity of the interface does not necessarily mean minimal features! Sublime Text 2 does a great job at maintaining an impressive list of features while not having the interface bloated with nested menus, buttons and toolbars.
  • Text Editing Features: I rely heavily on text editing features (Find/Replace with RegEx support, Multiple Selections and Batch Editing, Keyboard Shortcuts etc…) and these are very necessary to maintain a fluid / non interrupted line of thought. Not only for the sake of productivity but more importantly for the sake of focus.
  • Plugins: Plugins and their abundance either make or break a text editor. Sublime Text 2 has a great list of open-sourced and highly maintained plugins.
  • Syntax Highlight & Languages Support: My eyes are very important to me and I need to keep them functioning for a long time, I need a text editor that support intelligent syntax highlighting of multiple languages.
  • Quick File Navigation and Project Wrapping: One of the main productivity boosters in Sublime Text 2 is the ability to jump between files very quickly and wrap your projects in a project container that gives you quick access to the list of folders/files needed for a given project.
  • Compatibility with multiple OSs: I frequently switch between Operating Systems while working (from Windows to Linux to Mac sometimes) and having a tool that can jump with you is great! Sublime Text 2 is compatible with all major operating systems.

Remember, a text editor is not an IDE. While multiple IDE’s such as Visual Studio, Eclipse, Netbeans and Xcode among others provide all the above features and more (debugging capacity) they are usually memory hogs, slow and annoying to use.

Most Important Plugins (Packages)

To go back on track, I find the below list of plugins extremely necessary and part of my setup configuration before jumping to a new machine and start coding. Here they are, also, in no particular order:

1. Package Control – package_control

2. AdvancedNewFile – AdvancedNewFile

3. Alignment – alignment

4. Build Switcher – BuildSwitcher

5. DocBlockr – sublime-jsdocs

6. Github Tools – sublime-text-2-github-tools

7. Markdown Preview – sublimetext-markdown-preview

8. Gist – Gist

9. New From Selection – sublime_new_from_selection

10. Processing – processing-sublime

11. Emmet – emmet-sublime

12. Sublime Linter – SublimeLinter

These plugins are not timeless and probably in the upcoming versions of Sublime they will become obsolete. However for now, I’m going to use and abuse them.

Tip (Finding Package Documentation)

Most of the time when you install a new package from Package Control you need to see its documentation for Key Bindings (Keyboard Shortcuts). Most of the plugins have their README file in the package folder. To reach the package’s folder click Preferences and follow the below:

 Preferences - Browse Packages - (Package Name) - README.*

The Ultimate Creativity Test: Data Entry!

“The Nightmare” All hell has broken loose…

Let’s go right into the core of the discussion. During the recruitment phase many developers look great on paper, they are impressive during the interview, they excel in the programming challenges or exercises, seem very qualified etc…

Yet, there’s this period of time where a project really hits the point of no return: deadline was communicated to the client, lots of features are yet to be added, bugs are popping up right and left, the 24 hours a day seem no longer enough, bringing more resources is not a viable option because of the overhead required to assign tasks to them, emails, emails and more emails, management is breathing on your neck, status reports, in short all hell has broken loose, let’s call it “The Nightmare”. And right at the bottom of that list or backlog, there’s this tiny underestimated data entry task that you cannot assign to your main developers because they have much more important things to do, YET this data is vital to the project and to the end users eventually.

That pesky data entry task

The reason I gave the above (real life) example is to say, that during “The Nightmare” event, creativity and resourcefulness in solving problems in an efficient way become the essence of your lifeline. At that point in time, with barely enough stamina to write decent code, taking enough time to devise a proper plan to handle all the tasks on your task-list, especially the underestimated ones, is not an option.

Usually, the stupidest method to handle this data entry task is calling the most junior developer you have on the team and brainwash him into thinking that finishing it is what’s going to land Apollo 13 on the moon.

Hooray… Problem solved. NOPE

First day passes, the junior developer is blazing fast, 50 records are in the database already! Wow, this is going faster than anticipated!

Not so fast, the next day the number drops by 20%, the day after 60% and keeps on dropping until that developer quits, and if (s)he doesn’t, (s)he will be so demotivated and then we have a new problem.

Theoretical example of the deterioration of the speed of data entry per day
Theoretical example of the deterioration of the speed of data entry per day

 

 

 

 

 

 

 

The real life scenario might not be so dramatic, other more “brilliant” solutions will be devised such as bringing another junior developer to do the task! Now they can alternate whenever one of them feels bad! (*Sarcasm)

Let’s get back on track

I’ve probably taken the discussion way too far to emphasize the importance of the following:

  1. In the Nightmare situation we tend to forget that one of the core functions of a computer and programming is to replace human beings in executing daunting tasks more efficiently.
  2. We also wrongly believe that writing a script or a small program to execute the data entry is not cost efficient and doing it manually is.
  3. We overestimate the complexity of analyzing the data and extracting patterns and falsely accuse the data to be random and dismiss any attempt to extract a repetitive model.

Now the role of creativity and resourcefulness shines. For every belittled developer, who took a data entry task and transformed it into a fun data analysis challenge, Kudos. The appraisal is not for rediscovering the obvious (that computers are there to alleviate us from boring tasks) but for the efficient use of their time.

The Creativity Test

With the above said, I strongly believe that a data entry challenge to developers who are undergoing an interview is a good indicator of resourcefulness and creativity. Throw a daunting task at your potential developer employee and see how brilliantly they figure out a solution for it. The efficiency of the solution is highly correlated with the ingenuity of the mind behind it (this is simply a real life observation).

No matter how theoretically competent a developer is, no matter how much experience he has on paper, no matter how many large scale projects they have tackled, if they did not master the art of leveraging their knowledge especially when “the shit hits the fan”, all the information they possess is simply a hidden/locked up treasure.

Conclusion

A lot of theories already debate the boosting elements of creativity, such as locking down the resources one can use for the execution, zoning out etc… But these are topics of later discussions. The beauty of data entry tests is that they can be morphed to discover mesmerizing treasures or malicious booby-traps.