Unused tools (and skills) get rusty and fall apart

I was having an interesting twitter conversation a few days ago. The tweet that started it all claims that most male programmers don’t have beautiful, or even readable handwritings. And in my experience this is true. But I think there is a reason that runs deeper than a given social group having bad handwriting. I also haven’t met a physician that has a readable handwriting either.

In the case of physicians, if you have maybe read Thank You For Arguing, you will realise that it is their code grooming in effect, or their insider language, used to effectively differentiate themselves from others.

Although some programmers can be vain, I don’t think code grooming is the case here, because there is a deeper problem emerging that we were probably the first ones to experience. Handwriting has become obsolete, marked for removal in the next major version, we are following semantic versioning, right? But without joking, If I just take a look at myself, I
almost stopped writing by hand more than 10 years ago. Apart from the few months when I went to finish my bachelor’s degree, I haven’t used it since. I do write some things down on paper, and lately I’ve been using paper and pencil more and more, to sketch, and write down meeting notes. But that doesn’t solve the problem, the real problem. I have a (tough learned) skill, that I’m not using, not on a daily basis, but sometimes a whole month or more could go
by, without me picking up the pen and writing something down. And without use, that, in the past really valuable skill, is fading away. You will never completely forget the skill, but your confidence to use it will fade away with the idle time.

One more skill that I can think about is using a language. I have learned two foreign languages during my education (not counting Latin). And because of weird stream of events, my knowledge of German was better for the 4 years I learned it in elementary school. We had a really great teacher, and she made us talk in German, at least those 2 hours in school each week. Our English teacher, let’s just say she wasn’t as good. Everything changed in high school,
and the tables have turned. The situation with teachers wasn’t really bright way back then, so we got an unqualified German teacher, and over those four years, I’ve lost most of the knowledge. Not using it 14 years after I finished high school, I can still understand most of it, but can’t communicate to save my life. Our English teacher on the other hand, was a posh old lady, who knew how to teach. And I’ll be thankful to her for the rest of my life, because not
only did she try (and succeed) teaching us English, but she also tried (and somewhat succeeded) teaching us good manners, which is also a skill hardly gained, and easily lost. My father picked up a Russian hitchhiker this summer, while he was doing some work. And as he has learned Russian in school (we were behind the iron curtain then), he knew at least the basics. Not much, but could understand the guy, and luckily our languages are similar enough, so the Russian guy could understand him back in his pigeon Russian. I asked him how he felt speaking Russian for the first time in almost 40 years, and the answer was, I was afraid I would say something wrong, and offend the man, while I tried to help him.

It’s the same fear that I have when filling out some forms, and have to write anything down by hand. I delegated most of it till now, just because my vanity doesn’t allow me to show that I’m becoming more illiterate with each passing day. That is the reason I added learning Calligraphy to my bucket list. I just can’t allow that skill to fade away so easily. Also, as irony in life dictates, I’m in the great position to relearn German, and to even use it daily, so I’m going to grab that opportunity too. As you can never know too much, except for this guy here, you should commit to lifelong learning. And try to use all of your skills, as much as you can, you never know when you will pick up someone needing a ride, but he only speaks the language you learned in school 40 years ago.

Also, go and read Merlin’s Blog, you might find interesting and useful things there.

You are not just a (Insert language here) programmer

This is probably be one of those rant posts, so beware. I was listening to one
of the podcasts I try to regularly listen, and heard a good description of a
web developer. I like to call myself many names, and one of them is my
linkedin title Junior Shark Trainer, one of them is web developer, which
could be more precise (or broad) title than ruby on rails programmer.

If you do web development, or desktop application development (do those people
still exist, hello? :)), you are required to know a couple more things than
just wielding your programming language like a light saber, and slashing your
enemies with it. Here is an example, in the past 4 months, excluding the
text editors I work with, and explored, on the tasks involving web
development
I used:

  • bash (to write server creation and management scripts and various other
    little things)
  • sed (google it, it will blow your mind)
  • ruby (duh!)
  • javascript (and coffeescript)
  • html (plus erb, haml, handlebars)
  • css (sass, scss)
  • sql (yes it still exists, even if you are working with rails)
  • regular expressions https://xkcd.com/208/
  • centos linux distribution

And probably a lot of other things that I can’t even remember but went into
web development process. OK, if your job title is Systems Programmer II
then you are probably only expected to know how to fire up your editor, and
crunch out code. I’m happy I never had to work at a company where someone else
had to set up my development environment for me each time I got a new
computer. I made a reference to being able to craft your own light saber in a
post called Importance of installing your own development machine
from more than two years ago, and I still hold that reference true. If you
consider yourself a developer, you should be able to set up the thing you are
going to develop. I’m not talking about knowing everything about anything. As
you don’t have to know how to set up reverse proxy and make your
infrastructure able to scale vertically and horizontally, on the click of a
button. But if you, let’s say, want to bootstrap your startup, all of those things can be
of use, before you can delegate them to employees.

Not my job syndrome also comes to mind, and I’ve had it before. Nowadays I
look at it differently. It’s not my job to design and improve existing UX
interfaces, but I’ve gotten interested in doing it at the moment. Or writing
copy, marketing, trying to increase conversion, or basic design, none of it
was my job a year ago. If I think about it, even web development was not my
job seven years ago. I was a back-end database (oracle) programmer, the SQL
skills are really useful even to this day.

So, embrace every learning opportunity, learn something from it, and do try
everything. Even the ugly marketing/business/sales side of things, which is
the hell on earth for an average developer, but if you are a freelancer, I
won’t break this to you gently. YOU ARE ALREADY RUNNING A BUSINESS, a
business of one that is, but still a business.

I might change my title to Thought Leader in training, whatever that might
be. I just hope I’ll never get to be Programmer Level III anywhere. Who would say,
it’s not that big of a rant after all.

Why learning new things is so hard, and why you want it to be that way

Do you know that feeling when you are starting to learn something new? The feeling of being lost in all that stuff that you can not grasp? Feeling like an idiot while thinking that you will never learn it. Good, that is the best place where you want to be. Learning new things should be challenging, it should make you cringe sometimes, and make you want to bash your head in the wall.

I was looking at my son a few days ago, and I noticed how he was learning how to climb, trying, his feet would not listen to him, and be there where they should, he was aware of it, and it made him angry, because he wanted to climb up. But he tried again, and again, and again, and then he succeeded, now he is climbing fast and precise, which for a 20 month old kid, that is very good.

So the best place you can be is this one, banging your head, because it is where you learn the most. If you remember those editor learning curves, that are so steep, they are because we learn that way, we have to learn so many things in the start, be it vim, emacs, or even Ruby on Rails. The content you have to wrap your head around is so big, that you can’t fit it in your head in one go. But because of your frustration, you learn faster, likely some animal self preservation instinct kicking in. If learning something new becomes too easy, you are not doing it correctly. There is a saying in cycling, that goes something like this: “If your legs are not hurting while climbing a hill, then you are going way too slow, and need to pick up the pace”.

When do we stop learning like this, headstrong, just pushing until you accomplish something, I can’t tell, is it the moment when we become aware of other people, who may judge us, or we fear others judging us? Basically school, i would say high school inmost instances. Ironically, the place where you must be able to learn the most, makes you unlearn learning. Makes you give up trying to do things you do not know how to do, because you believe someone will laugh at you. Yep, that happened to me, and I gave up, only to pick it up later in my life, and realize the time I have wasted. And you must not waste your time like that too.

Just pursue your dreams and ignore the bad critics. Of course you need to have some common sense, and someone you trust to tell you when you suck. But, for example, some if not most people are told they can’t sing when they are teenagers, by underpaid public teachers, and then they give up completely. Maybe they needed more practice, their performance was not, and never would be Elvis like, but they could have learned to sing, a little at least. All people are not the same, and each one of us learns differently. Because of that, you must find a way that is best for you personally, also a reason why public education sucks, by treating and grading everyone the same. When you find your way, it might be writing things down, doodling, repeating out loud, or presenting at user groups and conferences, do it, and do more of it. Your brain will be grateful to you, and regular mental stimulation does the same for your brain, as exercise does for your body(and brain). Not only will you reduce the risk from e.g. Alzheimer’s Disease, but it could indirectly improve your life style, and with that your life expectancy. Learn more, live a longer and healthier life.

There is a great quote that describes this perfectly, and it is from a great book series, that everyone must read, at least once. “My brother has his sword, King Robert has his warhammer and I have my mind…and a mind needs books as a sword needs a whetstone if it is to keep its edge. That’s why I read so much Jon Snow.” – George R.R. Martin, A Game of Thrones

Learning Emacs

So, I’ve started using emacs in my daily development and writing process, after a couple of years using vim exclusively. Why did i do it? Mostly curiosity, as i’ve heard of this great behemoth that does everything under the sun, and you can also use it for writing. And lot’s of people i look up to in the IT world are using it, so what the heck, i decided to give it a try.

If you ever heard of emacs having a steep learning curve, those claims are 100% correct, and this SO question shows it truthfully.
So, starting with emacs you will get a screen with an emacs logo, some instructions and no way of doing anything you are used to doing, like opening files, saving them, or exiting the editor. That is also true when you are learning vim, so if you are a sadist there is a funny game to play with junior developer, open up vim/emacs for someone who hasn’t used them, and tell them to exit it, hours of fun guaranteed.

Back to serious world. The best thing that will help you learn emacs, is emacs itself, open it, type C-h t (hold down control, press h, let control go, press t). And it will open up the tutorial for you. Be sure to read the whole tutorial first. Then let it sit in your head, and after a day or two, reread the tutorial. Then do what everyone has done when switching editors, stick to it for a week or two, it will be painful, and you always have the safety net of your favourite editor/IDE if you fail to bend emacs to suit your style. Yes, that is correct, emacs is there to bend to your needs, not the other way around. But customizing it is something you should wait with, until you learn to use the editor properly.

If you absolutely need a stater kit of some kind, you can try with emacs prelude:
which comes bundled in with almost all plugins that a normal IDE has, be sure to read the readme, because some of the default keybindings are changed.
Also, emacs has a lot of online resources for you to learn from/copy elisp code and customize it as much as you want/need. Here are some of them:
Planet Emacsen – An aggregation of emacs related blogs and topics, from all around the world

Emacs Wiki – A place to learn anything and everything about emacs, a very big and scary place, use the search

Sacha Chua’s Emacs category – A blog with lots of interesting reads on it, the link will get directly to the emacs archive

What I have learned from a hackathon

I’ve attended a hackathon yesterday, that was the first “real” one in my life, and i’m still a bit under the influence. It was organised by the great people from Osijek Software City, and i thank them so much for the experience. I’ve learned so much, and almost nothing technical, because hackathons aren’t about it, as you will find out.

The topic: Crowd funding application

The topic was to make a simple crowd funding application. Nothing really complex, just a basic feature list with points for each complete feature.

The implementation: Rails

We chose Ruby on Rails as our implementation platform. That was a great choice, as we know it so well, and it would show later, that rails was the best framework for the rapid prototyping needed to win the hackathon.
The only thing lacking, where we lost a lot of points, was the front-end design, but you can’t expect a team of 3 backend developers and one software tester to create something really pretty. Although our UX was great, as we were using bootstrap, and not really in a great way.

The mistakes…

Overthinking it

We had a feature list to complete, which is fairly easy to do with rails, but we managed not to complete every functionality, just because we were loosing time hacking on the front-end to make it look acceptable.

Making it too complex

In a hackathon, time is working against you, you can say the same in product work, as unlimited time time is a thing no one has.
You have to make your features concise, and make them do only the stuff that needs to be done.

The learning…

KISS

Keep it simple, stupid. The best thing anyone can tell you, for any kind of product. Make it do only a couple of required features, and make that features well. Everything else doesn’t need to be done, at least at the moment. Don’t overthink the implementation, there are many currents in the rails development world which pull to this side or the other, but in this case, i must lean to @dhh and the pure rails way. You can optimise and improve later, after you have a product that is selling, and only the things that have to be optimised at the moment to keep the product running smooth.

Time is scarce, so make use of it

You don’t have time, as you are reading this, you have less and less of it. If you are still wasting it on nonsense, you won’t accomplish anything tangible. We had about 9 hours to make the application, and looking back, it was a couple of hours more than we needed, but we wasted time on initial configuration, setting up stuff, design. Lesson learned from this, Do the thing you are best at, and delegate everything else, if you can’t design to save your life, hire a great designer. If you can’t code, hire a great programmer. Just go outside, mingle with the community and you will surely find someone to team up with, if that isn’t the case, ask some of your acquaintances or friends, they will probably know someone who can help you build your dream.

Have a great team

The crucial thing any team needs is great communication, you don’t need ninjas, rockstars and whatnot. Anyone can build a web app, including high school kids who did a great job yesterday, i’m really happy that kids are going this path, as that will make their lives better.

Have fun

The main thing you are building a software product shouldn’t be money, or investors, but to have fun while doing it, if you aren’t having fun in your life, what is it worth to you then. I really like this job, and the people in the community are nice, if you are nice to them.

Final notes:

We had fun, we worked hard, i was swamped after spitting ruby code for 10 hours straight, and the experience was great. I met new people, had some interesting conversations, and saw other technologies people used to solve the same problem. We finished second, with a point difference of 15 points(the total possible was 1000), but it doesn’t really matter. The real reward is participating, and staying until the end, giving your best to solve the problem in hand, and supporting your team, as much as you possibly can.

Build your career (You can do better)

Let’s get this clear, this is not a rant against anyone, this is just a
statement. But you must realize this, it is not easy and this is not a one
week fix. Also, I’m not talking about leaving your job and finding a better
one, but improving yourself as a developer. If that consequently gets you a
better job, be it that way.

The first thing you need to do is decide for yourself that you want to do it.
There are lots of 9-5 developers out there that write their amount of code
while at work, then clock out and they are done. I assume you are not one of
them.

So how do you do it? I don’t know yet. I’m trying to find out just like you
are. Writing a blog is a good thing, so you will learn to articulate
your thoughts, or so they say. Don’t be discouraged by the lack of topics, or
afraid of bad reception, you want people to respond to your work, so you can
improve it and be better at it.

Be constructive while appraising someone’s work, maybe it’s the best they have
it in them, or maybe it could be a start of a great career and you ruin it with
your critic. Talking about that, develop a thick skin, learn a way do
weed out non constructive critic, and take the one you get in a best way
intended. Not everyone is a bestseller writer, or a computer language creator.

Invest yourself into opensource projects, there are
lots of resources on starting out. You can join or even start a local
developers or something_users group, something being a language or framework
you like and use. But first and foremost, you must be open to learn, every day
everything that crosses your path is a chance to learn. I’m not talking about
code or tools or even technology in that sense. If you’ve got the time take a
look at the Passionate Programmer, it’s a great book by Chad Fowler. He is also posting
the chapters free on his blog for people to read. I can’t recommend this book
more.

Learn a new programming language, learn a functional programming language,
make a mobile app, make a desktop app, make a web app, step out of your
comfort zone and take a look how other developers are doing it.

Go outside, take a deep breath, exercise, take care of your health. Read
another book: The Healthy Programmer, and enjoy your life a bit differently than while
sitting in a chair in some cubicle in the middle of nowhere.

Do some freelance work, on the side or full time, that will give you the
opportunity to try out new technologies, learn how to deal with clients, learn
project management, estimating, scheduling and everything you are not doing while
just coding 9-5.

So the conclusion is, learn every day, learn something different, step out of
the box and be yourself, the best you can be. You can leave a dent in the
universe, maybe a small one, but it doesn’t matter. Just try and not be a
drone.