Self-organization Skills you must have

1 May 2014 5 minutes to read

This small article is about technologies we must know and the responsibilities we have to share daily.

Some time ago I have read a book of Chad Fowler "The Passionate Programmer". Obviously this is not the first "famous" piece which tries to unite a developer with a manager into a super person and won't be a worthy addition to your personal library if you're a truly "Passionate" individual. Nevertheless I would like to admit some ideas.

Read the documentation

It sounds obvious, but nowadays it is really easy to get a bit of code at stack overflow, in the google groups, etc. Usually technologies we work with are a little bit outdated and techies copy-paste some parts of solution from these sources. If you do the same, just make sure that you understand why the piece of code looks as it looks. It is like a shortcut to the solution and a trap in the same time. You can check the documentation and find another, more flexible way to complete the task.

Don’t try to understand all business aspects of your employer

You need little time to analyze and understand the whole picture in a small project(for example startup). But in case of a huge business process you might need more than one year. Try to focus on your own application. Every project is linked with others, therefore spend your time to understand/improve/clarify only these relationships and leave everything else to professionals in those particular areas.

Learn related things

It is important to learn all the stuff around your workflow if you want to be productive. Let's take for example the unix environment. To set-up your working place you start with the shell, then with the installation of the packages, then launching your project and so on. Zoom it a little bit and you'll see that the area around the shell needs bash language, AWK, grep, sed and many other programs you could use/learn. Even the initial steps already cover a lot of knowledge.

Find time for self-education

If you work as a freelancer, your day is manageable. The set of tasks, some calls and things to be done by the end of the day. As a good freelancer, you can organize the whole week this way. Ideally, with perfect time planning, you gather less than one hour each working day. In case of full time job the timeframe you can foresee is shorter (ticket, stand-up, lunch, estimation meeting and so on). Finally in order to find some time for the self-education you may need to increase the working time, or combine it with the private time. Additionally you may want to read during your way to work or at boring meetings.

Touch should be hard

"Learn a new technology"! Is it enough to create a "hello world" application with a programming language new for you? If no, then how to measure this experience and when you can be sure that you know enough? Assuming that in order to learn a new technology we must learn it up to the point when we feel comfortable with this technology, and besides nobody knows when "a new technology" is learned completely.

The phrase sounds more like you have to examine something new just to be sure that you can choose proper design techniques for a new project or task. Also this sentence has an additional remark. Without an extensive touch we're not able to reveal hidden features as well as to find negative sides.

The bottom line is that we must create something not very common, not another blogging platform (try to open-source a library for example). As the start you might find these links quite handy: codechef, spoj or leetcode.com.

Learn related things but not all of them!

How often do we use bash scripting, AWK or VIM, and how many related things should we know? We can spread our self-education across a huge amount of technologies. Simply you may get lost and the solution you're planning to publish might be low-quality or even useless if you didn't spend enough time with the technology.

At the same time not all technologies deserve to be learned. If your project requires IE8/IE7, you have to read about problems, but don’t try to understand why these problems exist. The situation is the same with MySQL 5.0, Java 4, Python 2, XHTML, PHP 5.0 etc.

I have spent almost one year learning Assembler. Later I lost almost 3 months doing MFC. Definitely I can’t say that this experience is useless, it helped me to understand a lot of things about CPU, memory, hardware and so on. But nowadays this experience is absolutely unclaimed.

Responsibilities we have to share

Every person has a collection of skills. Like a box with gears which should be shared with a team. All you need is to answer fairly regarding gears somebody else may take, because no one wants to install a broken or an old item into the business engine.

Also, don't forget that the business needs vary the types of gear for different processes. Like a senior developer who interviews, or passionate coder which does only architect’s job without coding at all.

People around you may think absolutely different way, they may have a lot of opinions. But the engine must feel your investment. It means accepting or forcing the direction, pushing ideas, etc.

At the end

Read the latest documentation if possible. Try to learn a minimal set you need right now, improve it daily and be the right person for the project you like. Upgrade your environment as soon as you can and think twice before deciding in which technology to invest your time.